Skip to content

Commit 6e41f10

Browse files
committed
Bump LLVM to Version 18
1 parent 80c478f commit 6e41f10

File tree

7 files changed

+77
-8
lines changed

7 files changed

+77
-8
lines changed

build.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
2323
SVFHOME="${SCRIPT_DIR}"
2424
sysOS=$(uname -s)
2525
arch=$(uname -m)
26-
MajorLLVMVer=16
27-
LLVMVer=${MajorLLVMVer}.0.4
28-
UbuntuArmLLVM_RTTI="https://github.com/SVF-tools/SVF/releases/download/SVF-3.1/llvm-${MajorLLVMVer}.0.0-ubuntu22-rtti-aarch64.tar.gz"
26+
MajorLLVMVer=18
27+
LLVMVer=${MajorLLVMVer}.1.0
28+
UbuntuArmLLVM_RTTI="https://github.com/SVF-tools/SVF/releases/download/SVF-3.1/llvm-${MajorLLVMVer}.1.0-ubuntu22-rtti-aarch64.tar.gz"
2929
UbuntuArmLLVM="https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVMVer}/clang+llvm-${LLVMVer}-aarch64-linux-gnu.tar.xz"
30-
UbuntuLLVM_RTTI="https://github.com/SVF-tools/SVF/releases/download/SVF-3.1/llvm-${MajorLLVMVer}.0.0-ubuntu20-rtti-x86-64.tar.gz"
30+
UbuntuLLVM_RTTI="https://github.com/SVF-tools/SVF/releases/download/SVF-3.1/llvm-${MajorLLVMVer}.1.0-ubuntu20-rtti-x86-64.tar.gz"
3131
UbuntuLLVM="https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVMVer}/clang+llvm-${LLVMVer}-x86_64-linux-gnu-ubuntu-22.04.tar.xz"
3232
SourceLLVM="https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-${LLVMVer}.zip"
3333
UbuntuZ3="https://github.com/Z3Prover/z3/releases/download/z3-4.8.8/z3-4.8.8-x64-ubuntu-16.04.zip"
@@ -36,7 +36,7 @@ SourceZ3="https://github.com/Z3Prover/z3/archive/refs/tags/z3-4.8.8.zip"
3636

3737
# Keep LLVM version suffix for version checking and better debugging
3838
# keep the version consistent with LLVM_DIR in setup.sh and llvm_version in Dockerfile
39-
LLVMHome="llvm-${MajorLLVMVer}.0.0.obj"
39+
LLVMHome="llvm-${LLVMVer}.obj"
4040
Z3Home="z3.obj"
4141

4242

@@ -311,4 +311,4 @@ source ${SVFHOME}/setup.sh ${BUILD_TYPE}
311311
#########
312312
# Optionally, you can also specify a CXX_COMPILER and your $LLVM_HOME for your build
313313
# cmake -DCMAKE_CXX_COMPILER=$LLVM_DIR/bin/clang++ -DLLVM_DIR=$LLVM_DIR
314-
#########
314+
#########

svf-llvm/CMakeLists.txt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,22 @@ add_definitions(${_LLVM_DEFINITIONS})
4949
if(LLVM_LINK_LLVM_DYLIB)
5050
set(LLVM_LIBRARIES LLVM)
5151
else()
52-
llvm_map_components_to_libnames(LLVM_LIBRARIES all)
52+
llvm_map_components_to_libnames(LLVM_LIBRARIES
53+
analysis
54+
bitwriter
55+
core
56+
instcombine
57+
instrumentation
58+
ipo
59+
irreader
60+
linker
61+
scalaropts
62+
support
63+
target
64+
transformutils
65+
demangle
66+
Passes
67+
)
5368
endif()
5469

5570
# Search in the executables dir for this LLVM's clang instance

svf-llvm/include/SVF-LLVM/BasicTypes.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,10 @@ typedef llvm::GlobalObject GlobalObject;
7272
typedef llvm::Use Use;
7373
typedef llvm::ModulePass ModulePass;
7474
typedef llvm::IRBuilder<> IRBuilder;
75-
#if LLVM_VERSION_MAJOR >= 12
75+
#if LLVM_VERSION_MAJOR >= 12 && LLVM_VERSION_MAJOR <= 16
7676
typedef llvm::UnifyFunctionExitNodesLegacyPass UnifyFunctionExitNodes;
77+
#elif LLVM_VERSION_MAJOR > 16
78+
typedef llvm::UnifyFunctionExitNodesPass UnifyFunctionExitNodes;
7779
#else
7880
typedef llvm::UnifyFunctionExitNodes UnifyFunctionExitNodes;
7981
#endif

svf-llvm/include/SVF-LLVM/BreakConstantExpr.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
#ifndef BREAKCONSTANTGEPS_H
1616
#define BREAKCONSTANTGEPS_H
1717

18+
#if LLVM_VERSION_MAJOR > 16
19+
#include "llvm/Passes/PassBuilder.h"
20+
#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
21+
#endif
1822

1923
namespace SVF
2024
{
@@ -77,6 +81,25 @@ class MergeFunctionRets : public ModulePass
7781
const Function& fun = *iter;
7882
if(fun.isDeclaration())
7983
continue;
84+
#if LLVM_VERSION_MAJOR > 16
85+
llvm::PassBuilder PB;
86+
llvm::LoopAnalysisManager LAM;
87+
llvm::FunctionAnalysisManager FAM;
88+
llvm::CGSCCAnalysisManager CGAM;
89+
llvm::ModuleAnalysisManager MAM;
90+
91+
PB.registerModuleAnalyses(MAM);
92+
PB.registerCGSCCAnalyses(CGAM);
93+
PB.registerFunctionAnalyses(FAM);
94+
PB.registerLoopAnalyses(LAM);
95+
PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
96+
97+
llvm::FunctionPassManager FPM;
98+
FPM.addPass(llvm::UnifyFunctionExitNodesPass());
99+
FPM.run(const_cast<llvm::Function&>(fun), FAM);
100+
}
101+
}
102+
#else
80103
getUnifyExit(fun)->runOnFunction(const_cast<Function&>(fun));
81104
}
82105
}
@@ -86,6 +109,7 @@ class MergeFunctionRets : public ModulePass
86109
assert(!fn.isDeclaration() && "external function does not have DF");
87110
return &getAnalysis<UnifyFunctionExitNodes>(const_cast<Function&>(fn));
88111
}
112+
#endif
89113
};
90114

91115
} // End namespace SVF

svf-llvm/lib/LLVMModule.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@
4545
#include "Graphs/CallGraph.h"
4646
#include "Util/CallGraphBuilder.h"
4747

48+
#if LLVM_VERSION_MAJOR > 16
49+
#include <llvm/Passes/PassBuilder.h>
50+
#endif
51+
4852
using namespace std;
4953
using namespace SVF;
5054

@@ -267,7 +271,23 @@ void LLVMModuleSet::prePassSchedule()
267271
Function &fun = *F;
268272
if (fun.isDeclaration())
269273
continue;
274+
#if LLVM_VERSION_MAJOR <= 16
270275
p2->runOnFunction(fun);
276+
#else
277+
llvm::PassBuilder PB;
278+
llvm::LoopAnalysisManager LAM;
279+
llvm::FunctionAnalysisManager FAM;
280+
llvm::CGSCCAnalysisManager CGAM;
281+
llvm::ModuleAnalysisManager MAM;
282+
PB.registerModuleAnalyses(MAM);
283+
PB.registerCGSCCAnalyses(CGAM);
284+
PB.registerFunctionAnalyses(FAM);
285+
PB.registerLoopAnalyses(LAM);
286+
PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
287+
llvm::FunctionPassManager FPM;
288+
// FPM.addPass(llvm::UnifyFunctionExitNodesPass());
289+
FPM.run(fun, FAM);
290+
#endif
271291
}
272292
}
273293
}

svf-llvm/lib/LLVMUtil.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,11 @@ const std::string LLVMUtil::getSourceLoc(const Value* val )
461461
{
462462
if (SVFUtil::isa<AllocaInst>(inst))
463463
{
464+
#if LLVM_VERSION_MAJOR > 16
465+
for (llvm::DbgInfoIntrinsic *DII : llvm::findDbgDeclares(const_cast<Instruction*>(inst)))
466+
#else
464467
for (llvm::DbgInfoIntrinsic *DII : FindDbgDeclareUses(const_cast<Instruction*>(inst)))
468+
#endif
465469
{
466470
if (llvm::DbgDeclareInst *DDI = SVFUtil::dyn_cast<llvm::DbgDeclareInst>(DII))
467471
{

svf-llvm/lib/SVFIRBuilder.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,11 @@ void SVFIRBuilder::initDomTree(FunObjVar* svffun, const Function* fun)
276276
for (DominanceFrontierBase::const_iterator dfIter = df.begin(), eDfIter = df.end(); dfIter != eDfIter; dfIter++)
277277
{
278278
const BasicBlock* keyBB = dfIter->first;
279+
#if LLVM_VERSION_MAJOR > 16
280+
const llvm::SetVector<llvm::BasicBlock* >& domSet = dfIter->second;
281+
#else
279282
const std::set<BasicBlock* >& domSet = dfIter->second;
283+
#endif
280284
Set<const SVFBasicBlock*>& valueBasicBlocks = dfBBsMap[llvmModuleSet()->getSVFBasicBlock(keyBB)];
281285
for (const BasicBlock* bbValue:domSet)
282286
{

0 commit comments

Comments
 (0)