Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add SVFBasicBlock. BasicBlockEdge, Graph #1639

Merged
merged 12 commits into from
Jan 27, 2025
Merged

Conversation

bjjwwang
Copy link
Contributor

No description provided.


}

SVFBasicBlock* addBasicBlock(const SVFFunction* f)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SVFFunction is a BasicBlock? It looks strange here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll rename it

SVFBB2LLVMBBMap::const_iterator it = SVFBB2LLVMBB.find(value);
assert(it!=SVFBB2LLVMBB.end() && "can't find corresponding llvm value!");
return it->second;
if (value->getNodeKind() == SVFBaseNode::BasicBlockKd)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use isa<>

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for reminding. I write the classof()

}

inline const std::vector<const SVFBasicBlock*>& getBasicBlockList() const
inline std::vector<const SVFBasicBlock*> getBasicBlockList() const
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what this method for? why use transform? too complicated.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. I remove it. For all places where this API is needed, I use iterator instead.

@@ -301,8 +300,7 @@ void LLVMModuleSet::createSVFFunction(const Function* func)

for (const BasicBlock& bb : *func)
{
SVFBasicBlock* svfBB = basicBlockGraph->addBasicBlockToFunction(bb.getName().str(), svfFunc);
svfFunc->addBasicBlock(svfBB);
SVFBasicBlock* svfBB = svfFunc->addBasicBlock(bb.getName().str());
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

directly use bbGraph->addBasicBlock(..)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not use bbGraph->addBasicBlock?

{
allBBs.push_back(bb);

inline SVFBasicBlock* addBasicBlock(const std::string& bbName) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove this and use bbGraph::addBasicBlock.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok

{
id++;
SVFBasicBlock* bb = new SVFBasicBlock(id, f);
SVFBasicBlock* bb = new SVFBasicBlock(id, fun);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

when use C++ new keyword, always remember to delete in the destructor.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GenericGraph's destructor will delete every node from the IDToNodeMap.
We don't need to override the destructor.

Copy link

codecov bot commented Jan 26, 2025

Codecov Report

Attention: Patch coverage is 80.00000% with 22 lines in your changes missing coverage. Please review.

Project coverage is 63.74%. Comparing base (141be58) to head (8727fd1).
Report is 3 commits behind head on master.

Files with missing lines Patch % Lines
svf-llvm/lib/LLVMUtil.cpp 0.00% 7 Missing ⚠️
svf/lib/Graphs/BasicBlockG.cpp 0.00% 5 Missing ⚠️
svf/include/Graphs/BasicBlockG.h 93.54% 4 Missing ⚠️
svf/lib/Util/CDGBuilder.cpp 0.00% 2 Missing ⚠️
svf/lib/MSSA/MemSSA.cpp 0.00% 1 Missing ⚠️
svf/lib/MTA/MTA.cpp 0.00% 1 Missing ⚠️
svf/lib/MTA/MTAStat.cpp 0.00% 1 Missing ⚠️
svf/lib/Util/ThreadAPI.cpp 0.00% 1 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##           master    #1639      +/-   ##
==========================================
+ Coverage   63.70%   63.74%   +0.04%     
==========================================
  Files         245      247       +2     
  Lines       25999    26054      +55     
  Branches     4509     4511       +2     
==========================================
+ Hits        16563    16609      +46     
- Misses       9436     9445       +9     
Files with missing lines Coverage Δ
svf-llvm/include/SVF-LLVM/LLVMModule.h 98.48% <100.00%> (+0.01%) ⬆️
svf-llvm/lib/LLVMModule.cpp 81.06% <100.00%> (-0.03%) ⬇️
svf-llvm/lib/ObjTypeInference.cpp 95.19% <100.00%> (ø)
svf/include/Graphs/GenericGraph.h 82.85% <ø> (ø)
svf/include/SVFIR/SVFValue.h 89.38% <100.00%> (-2.15%) ⬇️
svf/lib/MSSA/MemRegion.cpp 70.35% <100.00%> (-0.10%) ⬇️
svf/lib/MTA/LockAnalysis.cpp 15.55% <100.00%> (-0.12%) ⬇️
svf/lib/MTA/MHP.cpp 47.21% <100.00%> (+0.72%) ⬆️
svf/lib/SABER/SaberCondAllocator.cpp 87.14% <100.00%> (-0.30%) ⬇️
svf/lib/SVFIR/SVFValue.cpp 83.13% <100.00%> (+6.28%) ⬆️
... and 10 more

... and 1 file with indirect coverage changes

@bjjwwang
Copy link
Contributor Author

--- base.log 2025-01-26 23:51:17.370759400 +1100
+++ new.log 2025-01-26 23:51:31.374825116 +1100
@@ -3,8 +3,8 @@
General Stats******
################ (program : redis-server.bc)###############
AddrsNum 22007
-BBWith2Succ 28770
-BBWith3Succ 1888
+BBWith2Succ 28873
+BBWith3Succ 1785
CallsNum 56545
ConstArrayObj 758
ConstStructObj 55
@@ -32,9 +32,9 @@
VarArrayObj 831
VarStructObj 1663
----------------Time and memory stats--------------------
-LLVMIRTime 12.545
-SVFIRTime 14.992
-SymbolTableTime 3.482
+LLVMIRTime 12.343
+SVFIRTime 14.539
+SymbolTableTime 3.632
#######################################################

PTACallGraph Stats (Andersen analysis)******
@@ -61,11 +61,11 @@
CollapseTime 0
CopyGepTime 0
LoadStoreTime 0
-MemoryUsageVmrss 4.17134e+06
-MemoryUsageVmsize 4.17092e+06
+MemoryUsageVmrss 4.17115e+06
+MemoryUsageVmsize 4.17099e+06
SCCDetectTime 0
SCCMergeTime 0
-TotalTime 545.883
+TotalTime 544.45
UpdateCGTime 0
----------------Numbers stats----------------------------
AddrProcessed 17879
@@ -116,47 +116,47 @@
Persistent Points-To Cache Statistics: Andersen's analysis bitvector
################ (program : redis-server.bc)###############
UniquePointsToSets 44826
-TotalUnions 672614
+TotalUnions 672597
PropertyUnions 222181
-UniqueUnions 19257
-LookupUnions 395182
-PreemptiveUnions 35994
+UniqueUnions 19258
+LookupUnions 395181
+PreemptiveUnions 35977
TotalComplements 3364058
PropertyComplements 2998447
UniqueComplements 16887
LookupComplements 331839
PreemptiveComplements 16885
-TotalIntersections 4184775
-PropertyIntersections 4147419
-UniqueIntersections 852
-LookupIntersections 2202
-PreemptiveIntersections 34302
+TotalIntersections 4184757
+PropertyIntersections 4147503
+UniqueIntersections 828
+LookupIntersections 2142
+PreemptiveIntersections 34284
#######################################################

Memory SSA Statistics******
################ (program : redis-server.bc)###############
----------------Time and memory stats--------------------
-AverageRegSize 85.1068
-GenMUCHITime 14.504
-GenRegionTime 3774.44
-InsertPHITime 4.524
-SSARenameTime 0.571
-TotalMSSATime 3794.05
+AverageRegSize 85.9112
+GenMUCHITime 14.833
+GenRegionTime 3764.92
+InsertPHITime 4.684
+SSARenameTime 0.631
+TotalMSSATime 3785.09
----------------Numbers stats----------------------------
BBHasMSSAPhi 10656
-CSChiNode 112311
+CSChiNode 110742
CSHasChi 22214
CSHasMu 24084
-CSMuNode 164973
-FunEntryChi 24354
+CSMuNode 162689
+FunEntryChi 24034
FunHasEntryChi 3939
FunHasRetMu 4624
-FunRetMu 24286
+FunRetMu 23966
LoadHasMu 24346
LoadMuNode 43116
-MSSAPhi 60005
+MSSAPhi 58766
MaxRegSize 1650
-MemRegions 4577
+MemRegions 4528
StoreChiNode 14268
StoreHasChi 10510
#######################################################
@@ -164,16 +164,16 @@
SVFG Statistics******
################ (program : redis-server.bc)###############
----------------Time and memory stats--------------------
-ATNodeTime 2.384
-AvgWeight 166.064
+ATNodeTime 2.393
+AvgWeight 168.56
ConnDirEdgeTime 0
-ConnIndEdgeTime 21.587
+ConnIndEdgeTime 22.113
OptTime 0
TLNodeTime 0
-TotalTime 23.971
+TotalTime 24.506
----------------Numbers stats----------------------------
-ActualIn 164973
-ActualOut 112311
+ActualIn 162689
+ActualOut 110742
ActualParam 57426
ActualRet 7530
Addr 17879
@@ -185,23 +185,23 @@
DirectCallEdge 41433
DirectEdge 292430
DirectRetEdge 6892
-FormalIn 24354
-FormalOut 24286
+FormalIn 24034
+FormalOut 23966
FormalParam 7868
FormalRet 789
Gep 84884
-IndCallEdge 192393
-IndRetEdge 126097
-IndirectEdge 724433
-IndirectEdgeLabels 120302372
+IndCallEdge 189473
+IndRetEdge 124146
+IndirectEdge 713775
+IndirectEdgeLabels 120313836
Load 24346
-MSSAPhi 60005
+MSSAPhi 58766
MaxInDegree 9710
MaxIndInDeg 9710
MaxIndOutDeg 2458
MaxOutDegree 9600
PHI 6770
Store 24167
-TotalEdge 1016863
-TotalNode 631727
+TotalEdge 1006205
+TotalNode 625995
#######################################################

@jumormt
Copy link
Contributor

jumormt commented Jan 26, 2025

--- log/redis-server.log 2025-01-27 10:30:57.091640744 +1100
+++ log/redis-server-xiao.log 2025-01-27 10:30:24.511962869 +1100
@@ -2,8 +2,8 @@
General Stats******
################ (program : redis-server.bc)###############
AddrsNum 22007
-BBWith2Succ 28770
-BBWith3Succ 1888
+BBWith2Succ 28873
+BBWith3Succ 1785
CallsNum 56545
ConstArrayObj 758
ConstStructObj 55
@@ -31,9 +31,9 @@
VarArrayObj 831
VarStructObj 1663
----------------Time and memory stats--------------------
-LLVMIRTime 4.34
-SVFIRTime 3.434
-SymbolTableTime 0.563
+LLVMIRTime 4.269
+SVFIRTime 3.363
+SymbolTableTime 0.589
#######################################################

PTACallGraph Stats (Andersen analysis)******
@@ -60,11 +60,11 @@
CollapseTime 0
CopyGepTime 0
LoadStoreTime 0
-MemoryUsageVmrss 4.17078e+06
-MemoryUsageVmsize 4.17059e+06
+MemoryUsageVmrss 4.17066e+06
+MemoryUsageVmsize 4.17058e+06
SCCDetectTime 0
SCCMergeTime 0
-TotalTime 128.759
+TotalTime 125.702
UpdateCGTime 0
----------------Numbers stats----------------------------
AddrProcessed 17879
@@ -115,47 +115,47 @@
Persistent Points-To Cache Statistics: Andersen's analysis bitvector
################ (program : redis-server.bc)###############
UniquePointsToSets 44826
-TotalUnions 672558
+TotalUnions 672565
PropertyUnions 222172
-UniqueUnions 19258
-LookupUnions 395148
-PreemptiveUnions 35980
+UniqueUnions 19257
+LookupUnions 395149
+PreemptiveUnions 35987
TotalComplements 3363830
PropertyComplements 2998252
UniqueComplements 16887
LookupComplements 331806
PreemptiveComplements 16885
-TotalIntersections 4182705
-PropertyIntersections 4145456
-UniqueIntersections 834
-LookupIntersections 2128
-PreemptiveIntersections 34287
+TotalIntersections 4182713
+PropertyIntersections 4145471
+UniqueIntersections 808
+LookupIntersections 2139
+PreemptiveIntersections 34295
#######################################################

Memory SSA Statistics******
################ (program : redis-server.bc)###############
----------------Time and memory stats--------------------
-AverageRegSize 85.8766
-GenMUCHITime 2.179
-GenRegionTime 621.749
-InsertPHITime 0.65
-SSARenameTime 0.077
-TotalMSSATime 624.663
+AverageRegSize 85.6225
+GenMUCHITime 2.118
+GenRegionTime 610.901
+InsertPHITime 0.684
+SSARenameTime 0.094
+TotalMSSATime 613.801
----------------Numbers stats----------------------------
BBHasMSSAPhi 10656
-CSChiNode 110781
+CSChiNode 111620
CSHasChi 22214
CSHasMu 24084
-CSMuNode 162728
-FunEntryChi 24040
+CSMuNode 163704
+FunEntryChi 24189
FunHasEntryChi 3939
FunHasRetMu 4624
-FunRetMu 23972
+FunRetMu 24121
LoadHasMu 24342
LoadMuNode 43107
-MSSAPhi 58814
+MSSAPhi 59492
MaxRegSize 1650
-MemRegions 4530
+MemRegions 4548
StoreChiNode 14268
StoreHasChi 10506
#######################################################
@@ -163,16 +163,16 @@
SVFG Statistics******
################ (program : redis-server.bc)###############
----------------Time and memory stats--------------------
-ATNodeTime 0.888
-AvgWeight 168.485
+ATNodeTime 0.864
+AvgWeight 167.292
ConnDirEdgeTime 0
-ConnIndEdgeTime 4.626
+ConnIndEdgeTime 4.593
OptTime 0
TLNodeTime 0
-TotalTime 5.514
+TotalTime 5.457
----------------Numbers stats----------------------------
-ActualIn 162728
-ActualOut 110781
+ActualIn 163704
+ActualOut 111620
ActualParam 57426
ActualRet 7530
Addr 17879
@@ -184,25 +184,25 @@
DirectCallEdge 41433
DirectEdge 292410
DirectRetEdge 6892
-FormalIn 24040
-FormalOut 23972
+FormalIn 24189
+FormalOut 24121
FormalParam 7868
FormalRet 789
Gep 84876
-IndCallEdge 189539
-IndRetEdge 124212
-IndirectEdge 714061
-IndirectEdgeLabels 120308915
+IndCallEdge 190756
+IndRetEdge 125220
+IndirectEdge 719141
+IndirectEdgeLabels 120306269
Load 24342
-MSSAPhi 58814
+MSSAPhi 59492
MaxInDegree 9710
MaxIndInDeg 9710
MaxIndOutDeg 2458
MaxOutDegree 9600
PHI 6770
Store 24163
-TotalEdge 1006471
-TotalNode 626117
+TotalEdge 1011551
+TotalNode 628908
#######################################################

PTACallGraph Stats (Flow-sensitive analysis)******
@@ -223,7 +223,7 @@
----------------Time and memory stats--------------------
AddrTime 0
AverageSCCSize 19.105
AvgTopLvlPtsSize 370.002
AvgVersionPtsSize 32.3067
CopyTime 0
@@ -231,20 +231,20 @@
GepTime 0
IndirectPropaTime 0
LoadTime 0
-MemoryUsageVmrss 3.61776e+06
-MemoryUsageVmsize 3.65085e+06
+MemoryUsageVmrss 3.62265e+06
+MemoryUsageVmsize 3.65889e+06
PhiTime 0
-PrelabelingTime 0.143
+PrelabelingTime 0.141
ProcessTime 0
PropagationTime 0
SCCTime 0
-SolveTime 458.742
+SolveTime 437.714
StoreTime 0
Strong/WeakUpdTime 0
-TotalTime 674.589
+TotalTime 656.73
UpdateCGTime 0
VersionPropTime 0
-meldLabelingTime 212.323
+meldLabelingTime 215.548
----------------Numbers stats----------------------------
CopysNum 14138
DummyFieldPtrs 2305
@@ -262,33 +262,33 @@
Pointers 494723
ProcessedAParam 0
ProcessedAddr 107274
-ProcessedCopy 159207
+ProcessedCopy 162153
ProcessedFRet 0
-ProcessedGep 851232
-ProcessedLoad 867849
-ProcessedMSSANode 2282010
-ProcessedPhi 103433
-ProcessedStore 320280
+ProcessedGep 863486
+ProcessedLoad 857215
+ProcessedMSSANode 2298756
+ProcessedPhi 103771
+ProcessedStore 318009
SolveIterations 6
StoresNum 24163
StrongUpdates 3377
TotalEmptyVPts 0
-TotalExistingVPts 15080536
-TotalNonEmptyVPts 15080536
+TotalExistingVPts 15080515
+TotalNonEmptyVPts 15080515
TotalObjects 15732
TotalPointers 497028
TotalSingleVObjs 0
-TotalVersions 17442434
+TotalVersions 17442341
#######################################################

Persistent Points-To Cache Statistics: flow-sensitive analysis bitvector
################ (program : redis-server.bc)###############
-UniquePointsToSets 29144
-TotalUnions 1136333231
-PropertyUnions 996428538
-UniqueUnions 35281
-LookupUnions 139821576
-PreemptiveUnions 47836
+UniquePointsToSets 29470
+TotalUnions 1126097208
+PropertyUnions 977443851
+UniqueUnions 37017
+LookupUnions 148566322
+PreemptiveUnions 50018
TotalComplements 0
PropertyComplements 0
UniqueComplements 0

return it->second;
if (value->getNodeKind() == SVFBaseNode::BasicBlockKd)
{
const SVFBasicBlock* bb = SVFUtil::cast<SVFBasicBlock>(value);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why we need two maps, SVFBB2LLVMBBMap and SVFBaseNode2LLVMValueMap?

@@ -159,8 +159,9 @@ void MHP::updateNonCandidateFunInterleaving()
{
const CallStrCxt& curCxt = cts.getContext();

for (const SVFBasicBlock* svfbb : fun->getBasicBlockList())
for (auto it : *fun)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't use auto and use explicit type and fix all others too.

}

inline const SVFBasicBlock* getEntryBlock() const
{
assert(hasBasicBlock() && "function does not have any Basicblock, external function?");
return allBBs.front();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

assert no predecessor.

@@ -437,23 +438,19 @@ class SVFFunction : public SVFValue
/// Carefully! 'back' is just the last basic block of function,
/// but not necessarily a exit basic block
/// more refer to: https://github.com/SVF-tools/SVF/pull/1262
return allBBs.back();
return std::prev(bbGraph->end())->second;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

assert no sucessor

@@ -586,8 +586,7 @@ Set<const Value *> &ObjTypeInference::bwfindAllocOfVar(const Value *var)
if (!callee->isDeclaration())
{
const SVFFunction *svfFunc = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(callee);
const BasicBlock* exitBB = SVFUtil::cast<BasicBlock>(LLVMModuleSet::getLLVMModuleSet()->getLLVMValue(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

roll back

{
LLVMBB2SVFBBMap::const_iterator it = LLVMBB2SVFBB.find(bb);
assert(it!=LLVMBB2SVFBB.end() && "SVF BasicBlock not found!");
return it->second;
}

const BasicBlock* getLLVMBasicBlock(const SVFBasicBlock* bb) const
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove this method.

@@ -56,6 +57,7 @@ class LLVMModuleSet
typedef Map<const Function*, SVFFunction*> LLVMFun2SVFFunMap;
typedef Map<const Function*, CallGraphNode*> LLVMFun2CallGraphNodeMap;
typedef Map<const BasicBlock*, SVFBasicBlock*> LLVMBB2SVFBBMap;
typedef Map<const SVFBasicBlock*, const BasicBlock*> SVFBB2LLVMBBMap;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove this map.

@@ -586,7 +586,7 @@ Set<const Value *> &ObjTypeInference::bwfindAllocOfVar(const Value *var)
if (!callee->isDeclaration())
{
const SVFFunction *svfFunc = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(callee);
const BasicBlock* exitBB = LLVMModuleSet::getLLVMModuleSet()->getLLVMBasicBlock(svfFunc->getExitBB());
const BasicBlock* exitBB = SVFUtil::dyn_cast<BasicBlock>(LLVMModuleSet::getLLVMModuleSet()->getLLVMValue(svfFunc->getExitBB()));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use cast here or you need to add an assertion

@@ -893,7 +893,7 @@ Set<const Value *> &ObjTypeInference::bwFindAllocOrClsNameSources(const Value *s
if (!callee->isDeclaration())
{
const SVFFunction *svfFunc = LLVMModuleSet::getLLVMModuleSet()->getSVFFunction(callee);
const BasicBlock* exitBB = LLVMModuleSet::getLLVMModuleSet()->getLLVMBasicBlock(svfFunc->getExitBB());
const BasicBlock* exitBB = SVFUtil::dyn_cast<BasicBlock>(LLVMModuleSet::getLLVMModuleSet()->getLLVMValue(svfFunc->getExitBB()));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see above

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const BasicBlock* exitBB = SVFUtil::dyn_cast(LLVMModuleSet::getLLVMModuleSet()->getLLVMValue(svfFunc->getExitBB()));
assert (exitBB && "exit bb is not a basic block?");

SVFBasicBlock* svfBB =
new SVFBasicBlock(getSVFType(bb.getType()), svfFunc);
svfFunc->addBasicBlock(svfBB);
SVFBasicBlock* svfBB = bbGraph->addBasicBlock(bb.getName().str());
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

put this line "SVFBasicBlock* svfBB = bbGraph->addBasicBlock(bb.getName().str());" into "addBasicBlockMap" and rename addBasicBlockMap to addBasicBlock

@@ -411,13 +422,14 @@ class SVFFunction : public SVFValue

inline bool hasBasicBlock() const
{
return !allBBs.empty();
return bbGraph && bbGraph->getTotalNodeNum()>0;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bbGraph && bbGraph->begin() != bbGraph->end();

@yuleisui yuleisui merged commit 3eac69e into SVF-tools:master Jan 27, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants