svf-lib 1.0.1132 → 1.0.1135

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -64,13 +64,9 @@ public:
64
64
  // Whole program analysis
65
65
  Andersen_BASE, ///< Base Andersen PTA
66
66
  Andersen_WPA, ///< Andersen PTA
67
- AndersenLCD_WPA, ///< Lazy cycle detection andersen-style WPA
68
- AndersenHCD_WPA, ///< Hybird cycle detection andersen-style WPA
69
- AndersenHLCD_WPA, ///< Hybird lazy cycle detection andersen-style WPA
70
67
  AndersenSCD_WPA, ///< Selective cycle detection andersen-style WPA
71
68
  AndersenSFR_WPA, ///< Stride-based field representation
72
69
  AndersenWaveDiff_WPA, ///< Diff wave propagation andersen-style WPA
73
- AndersenWaveDiffWithType_WPA, ///< Diff wave propagation with type info andersen-style WPA
74
70
  Steensgaard_WPA, ///< Steensgaard PTA
75
71
  CSCallString_WPA, ///< Call string based context sensitive WPA
76
72
  CSSummary_WPA, ///< Summary based context sensitive WPA
@@ -35,7 +35,6 @@
35
35
  #include "WPA/WPASolver.h"
36
36
  #include "MemoryModel/SVFIR.h"
37
37
  #include "Graphs/ConsG.h"
38
- #include "Graphs/OfflineConsG.h"
39
38
 
40
39
  namespace SVF
41
40
  {
@@ -86,11 +85,7 @@ public:
86
85
  {
87
86
  return ( pta->getAnalysisTy() == Andersen_BASE
88
87
  || pta->getAnalysisTy() == Andersen_WPA
89
- || pta->getAnalysisTy() == AndersenLCD_WPA
90
- || pta->getAnalysisTy() == AndersenHCD_WPA
91
- || pta->getAnalysisTy() == AndersenHLCD_WPA
92
88
  || pta->getAnalysisTy() == AndersenWaveDiff_WPA
93
- || pta->getAnalysisTy() == AndersenWaveDiffWithType_WPA
94
89
  || pta->getAnalysisTy() == AndersenSCD_WPA
95
90
  || pta->getAnalysisTy() == AndersenSFR_WPA
96
91
  || pta->getAnalysisTy() == TypeCPP_WPA
@@ -190,11 +185,7 @@ public:
190
185
  static inline bool classof(const PointerAnalysis *pta)
191
186
  {
192
187
  return (pta->getAnalysisTy() == Andersen_WPA
193
- || pta->getAnalysisTy() == AndersenLCD_WPA
194
- || pta->getAnalysisTy() == AndersenHCD_WPA
195
- || pta->getAnalysisTy() == AndersenHLCD_WPA
196
188
  || pta->getAnalysisTy() == AndersenWaveDiff_WPA
197
- || pta->getAnalysisTy() == AndersenWaveDiffWithType_WPA
198
189
  || pta->getAnalysisTy() == AndersenSCD_WPA
199
190
  || pta->getAnalysisTy() == AndersenSFR_WPA);
200
191
  }
@@ -454,217 +445,6 @@ protected:
454
445
  virtual void mergeNodeToRep(NodeID nodeId,NodeID newRepId);
455
446
  };
456
447
 
457
-
458
- /*
459
- * Lazy Cycle Detection Based Andersen Analysis
460
- */
461
- class AndersenLCD : virtual public Andersen
462
- {
463
-
464
- private:
465
- static AndersenLCD* lcdAndersen;
466
- EdgeSet metEdges;
467
- NodeSet lcdCandidates;
468
-
469
- public:
470
- AndersenLCD(SVFIR* _pag, PTATY type = AndersenLCD_WPA) :
471
- Andersen(_pag, type), metEdges({}), lcdCandidates( {})
472
- {
473
- }
474
-
475
- /// Create an singleton instance directly instead of invoking llvm pass manager
476
- static AndersenLCD* createAndersenLCD(SVFIR* _pag)
477
- {
478
- if (lcdAndersen == nullptr)
479
- {
480
- lcdAndersen = new AndersenLCD(_pag);
481
- lcdAndersen->analyze();
482
- return lcdAndersen;
483
- }
484
- return lcdAndersen;
485
- }
486
-
487
- static void releaseAndersenLCD()
488
- {
489
- if (lcdAndersen)
490
- delete lcdAndersen;
491
- lcdAndersen = nullptr;
492
- }
493
-
494
- protected:
495
- // 'lcdCandidates' is used to collect nodes need to be visited by SCC detector
496
- //@{
497
- inline bool hasLCDCandidate () const
498
- {
499
- return !lcdCandidates.empty();
500
- };
501
- inline void cleanLCDCandidate()
502
- {
503
- lcdCandidates.clear();
504
- };
505
- inline void addLCDCandidate(NodeID nodeId)
506
- {
507
- lcdCandidates.insert(nodeId);
508
- };
509
- //@}
510
-
511
- // 'metEdges' is used to collect edges met by AndersenLCD, to avoid redundant visit
512
- //@{
513
- bool isMetEdge (ConstraintEdge* edge) const
514
- {
515
- EdgeSet::const_iterator it = metEdges.find(edge->getEdgeID());
516
- return it != metEdges.end();
517
- };
518
- void addMetEdge(ConstraintEdge* edge)
519
- {
520
- metEdges.insert(edge->getEdgeID());
521
- };
522
- //@}
523
-
524
- //AndersenLCD worklist processer
525
- void solveWorklist();
526
- // Solve constraints of each nodes
527
- virtual void handleCopyGep(ConstraintNode* node);
528
- // Collapse nodes and fields based on 'lcdCandidates'
529
- void mergeSCC();
530
- // AndersenLCD specified SCC detector, need to input a nodeStack 'lcdCandidate'
531
- NodeStack& SCCDetect();
532
- bool mergeSrcToTgt(NodeID nodeId, NodeID newRepId);
533
- };
534
-
535
-
536
-
537
- /*!
538
- * Hybrid Cycle Detection Based Andersen Analysis
539
- */
540
- class AndersenHCD : virtual public Andersen
541
- {
542
-
543
- public:
544
- typedef SCCDetection<OfflineConsG*> OSCC;
545
-
546
- private:
547
- static AndersenHCD* hcdAndersen;
548
- NodeSet mergedNodes;
549
- OfflineConsG* oCG;
550
-
551
- public:
552
- AndersenHCD(SVFIR* _pag, PTATY type = AndersenHCD_WPA) :
553
- Andersen(_pag, type), oCG(nullptr)
554
- {
555
- }
556
-
557
- /// Create an singleton instance directly instead of invoking llvm pass manager
558
- static AndersenHCD *createAndersenHCD(SVFIR* _pag)
559
- {
560
- if (hcdAndersen == nullptr)
561
- {
562
- hcdAndersen = new AndersenHCD(_pag);
563
- hcdAndersen->analyze();
564
- return hcdAndersen;
565
- }
566
- return hcdAndersen;
567
- }
568
-
569
- static void releaseAndersenHCD()
570
- {
571
- if (hcdAndersen)
572
- delete hcdAndersen;
573
- hcdAndersen = nullptr;
574
- }
575
-
576
- protected:
577
- virtual void initialize();
578
-
579
- // Get offline rep node from offline constraint graph
580
- //@{
581
- inline bool hasOfflineRep(NodeID nodeId) const
582
- {
583
- return oCG->hasOCGRep(nodeId);
584
- }
585
- inline NodeID getOfflineRep(NodeID nodeId)
586
- {
587
- return oCG->getOCGRep(nodeId);
588
- }
589
- //@}
590
-
591
- // The set 'mergedNodes' is used to record the merged node, therefore avoiding re-merge nodes
592
- //@{
593
- inline bool isaMergedNode(NodeID node) const
594
- {
595
- NodeSet::const_iterator it = mergedNodes.find(node);
596
- return it != mergedNodes.end();
597
- };
598
- inline void setMergedNode(NodeID node)
599
- {
600
- if (!isaMergedNode(node))
601
- mergedNodes.insert(node);
602
- };
603
- //@}
604
-
605
- virtual void solveWorklist();
606
- virtual void mergeSCC(NodeID nodeId);
607
- void mergeNodeAndPts(NodeID node, NodeID tgt);
608
-
609
- };
610
-
611
-
612
-
613
- /*!
614
- * Hybrid Lazy Cycle Detection Based Andersen Analysis
615
- */
616
- class AndersenHLCD : public AndersenHCD, public AndersenLCD
617
- {
618
-
619
- private:
620
- static AndersenHLCD* hlcdAndersen;
621
-
622
- public:
623
- AndersenHLCD(SVFIR* _pag, PTATY type = AndersenHLCD_WPA) :
624
- Andersen(_pag, type), AndersenHCD(_pag, type), AndersenLCD(_pag, type)
625
- {
626
- }
627
-
628
- /// Create an singleton instance directly instead of invoking llvm pass manager
629
- static AndersenHLCD *createAndersenHLCD(SVFIR* _pag)
630
- {
631
- if (hlcdAndersen == nullptr)
632
- {
633
- hlcdAndersen = new AndersenHLCD(_pag);
634
- hlcdAndersen->analyze();
635
- return hlcdAndersen;
636
- }
637
- return hlcdAndersen;
638
- }
639
-
640
- static void releaseAndersenHLCD()
641
- {
642
- if (hlcdAndersen)
643
- delete hlcdAndersen;
644
- hlcdAndersen = nullptr;
645
- }
646
-
647
- protected:
648
- void initialize()
649
- {
650
- AndersenHCD::initialize();
651
- }
652
- void solveWorklist()
653
- {
654
- AndersenHCD::solveWorklist();
655
- }
656
- void handleCopyGep(ConstraintNode* node)
657
- {
658
- AndersenLCD::handleCopyGep(node);
659
- }
660
- void mergeSCC(NodeID nodeId);
661
- bool mergeSrcToTgt(NodeID nodeId, NodeID newRepId)
662
- {
663
- return AndersenLCD::mergeSrcToTgt(nodeId, newRepId);
664
- }
665
-
666
- };
667
-
668
448
  } // End namespace SVF
669
449
 
670
450
  #endif /* ANDERSENPASS_H_ */
Binary file
@@ -64,13 +64,9 @@ public:
64
64
  // Whole program analysis
65
65
  Andersen_BASE, ///< Base Andersen PTA
66
66
  Andersen_WPA, ///< Andersen PTA
67
- AndersenLCD_WPA, ///< Lazy cycle detection andersen-style WPA
68
- AndersenHCD_WPA, ///< Hybird cycle detection andersen-style WPA
69
- AndersenHLCD_WPA, ///< Hybird lazy cycle detection andersen-style WPA
70
67
  AndersenSCD_WPA, ///< Selective cycle detection andersen-style WPA
71
68
  AndersenSFR_WPA, ///< Stride-based field representation
72
69
  AndersenWaveDiff_WPA, ///< Diff wave propagation andersen-style WPA
73
- AndersenWaveDiffWithType_WPA, ///< Diff wave propagation with type info andersen-style WPA
74
70
  Steensgaard_WPA, ///< Steensgaard PTA
75
71
  CSCallString_WPA, ///< Call string based context sensitive WPA
76
72
  CSSummary_WPA, ///< Summary based context sensitive WPA
@@ -35,7 +35,6 @@
35
35
  #include "WPA/WPASolver.h"
36
36
  #include "MemoryModel/SVFIR.h"
37
37
  #include "Graphs/ConsG.h"
38
- #include "Graphs/OfflineConsG.h"
39
38
 
40
39
  namespace SVF
41
40
  {
@@ -86,11 +85,7 @@ public:
86
85
  {
87
86
  return ( pta->getAnalysisTy() == Andersen_BASE
88
87
  || pta->getAnalysisTy() == Andersen_WPA
89
- || pta->getAnalysisTy() == AndersenLCD_WPA
90
- || pta->getAnalysisTy() == AndersenHCD_WPA
91
- || pta->getAnalysisTy() == AndersenHLCD_WPA
92
88
  || pta->getAnalysisTy() == AndersenWaveDiff_WPA
93
- || pta->getAnalysisTy() == AndersenWaveDiffWithType_WPA
94
89
  || pta->getAnalysisTy() == AndersenSCD_WPA
95
90
  || pta->getAnalysisTy() == AndersenSFR_WPA
96
91
  || pta->getAnalysisTy() == TypeCPP_WPA
@@ -190,11 +185,7 @@ public:
190
185
  static inline bool classof(const PointerAnalysis *pta)
191
186
  {
192
187
  return (pta->getAnalysisTy() == Andersen_WPA
193
- || pta->getAnalysisTy() == AndersenLCD_WPA
194
- || pta->getAnalysisTy() == AndersenHCD_WPA
195
- || pta->getAnalysisTy() == AndersenHLCD_WPA
196
188
  || pta->getAnalysisTy() == AndersenWaveDiff_WPA
197
- || pta->getAnalysisTy() == AndersenWaveDiffWithType_WPA
198
189
  || pta->getAnalysisTy() == AndersenSCD_WPA
199
190
  || pta->getAnalysisTy() == AndersenSFR_WPA);
200
191
  }
@@ -454,217 +445,6 @@ protected:
454
445
  virtual void mergeNodeToRep(NodeID nodeId,NodeID newRepId);
455
446
  };
456
447
 
457
-
458
- /*
459
- * Lazy Cycle Detection Based Andersen Analysis
460
- */
461
- class AndersenLCD : virtual public Andersen
462
- {
463
-
464
- private:
465
- static AndersenLCD* lcdAndersen;
466
- EdgeSet metEdges;
467
- NodeSet lcdCandidates;
468
-
469
- public:
470
- AndersenLCD(SVFIR* _pag, PTATY type = AndersenLCD_WPA) :
471
- Andersen(_pag, type), metEdges({}), lcdCandidates( {})
472
- {
473
- }
474
-
475
- /// Create an singleton instance directly instead of invoking llvm pass manager
476
- static AndersenLCD* createAndersenLCD(SVFIR* _pag)
477
- {
478
- if (lcdAndersen == nullptr)
479
- {
480
- lcdAndersen = new AndersenLCD(_pag);
481
- lcdAndersen->analyze();
482
- return lcdAndersen;
483
- }
484
- return lcdAndersen;
485
- }
486
-
487
- static void releaseAndersenLCD()
488
- {
489
- if (lcdAndersen)
490
- delete lcdAndersen;
491
- lcdAndersen = nullptr;
492
- }
493
-
494
- protected:
495
- // 'lcdCandidates' is used to collect nodes need to be visited by SCC detector
496
- //@{
497
- inline bool hasLCDCandidate () const
498
- {
499
- return !lcdCandidates.empty();
500
- };
501
- inline void cleanLCDCandidate()
502
- {
503
- lcdCandidates.clear();
504
- };
505
- inline void addLCDCandidate(NodeID nodeId)
506
- {
507
- lcdCandidates.insert(nodeId);
508
- };
509
- //@}
510
-
511
- // 'metEdges' is used to collect edges met by AndersenLCD, to avoid redundant visit
512
- //@{
513
- bool isMetEdge (ConstraintEdge* edge) const
514
- {
515
- EdgeSet::const_iterator it = metEdges.find(edge->getEdgeID());
516
- return it != metEdges.end();
517
- };
518
- void addMetEdge(ConstraintEdge* edge)
519
- {
520
- metEdges.insert(edge->getEdgeID());
521
- };
522
- //@}
523
-
524
- //AndersenLCD worklist processer
525
- void solveWorklist();
526
- // Solve constraints of each nodes
527
- virtual void handleCopyGep(ConstraintNode* node);
528
- // Collapse nodes and fields based on 'lcdCandidates'
529
- void mergeSCC();
530
- // AndersenLCD specified SCC detector, need to input a nodeStack 'lcdCandidate'
531
- NodeStack& SCCDetect();
532
- bool mergeSrcToTgt(NodeID nodeId, NodeID newRepId);
533
- };
534
-
535
-
536
-
537
- /*!
538
- * Hybrid Cycle Detection Based Andersen Analysis
539
- */
540
- class AndersenHCD : virtual public Andersen
541
- {
542
-
543
- public:
544
- typedef SCCDetection<OfflineConsG*> OSCC;
545
-
546
- private:
547
- static AndersenHCD* hcdAndersen;
548
- NodeSet mergedNodes;
549
- OfflineConsG* oCG;
550
-
551
- public:
552
- AndersenHCD(SVFIR* _pag, PTATY type = AndersenHCD_WPA) :
553
- Andersen(_pag, type), oCG(nullptr)
554
- {
555
- }
556
-
557
- /// Create an singleton instance directly instead of invoking llvm pass manager
558
- static AndersenHCD *createAndersenHCD(SVFIR* _pag)
559
- {
560
- if (hcdAndersen == nullptr)
561
- {
562
- hcdAndersen = new AndersenHCD(_pag);
563
- hcdAndersen->analyze();
564
- return hcdAndersen;
565
- }
566
- return hcdAndersen;
567
- }
568
-
569
- static void releaseAndersenHCD()
570
- {
571
- if (hcdAndersen)
572
- delete hcdAndersen;
573
- hcdAndersen = nullptr;
574
- }
575
-
576
- protected:
577
- virtual void initialize();
578
-
579
- // Get offline rep node from offline constraint graph
580
- //@{
581
- inline bool hasOfflineRep(NodeID nodeId) const
582
- {
583
- return oCG->hasOCGRep(nodeId);
584
- }
585
- inline NodeID getOfflineRep(NodeID nodeId)
586
- {
587
- return oCG->getOCGRep(nodeId);
588
- }
589
- //@}
590
-
591
- // The set 'mergedNodes' is used to record the merged node, therefore avoiding re-merge nodes
592
- //@{
593
- inline bool isaMergedNode(NodeID node) const
594
- {
595
- NodeSet::const_iterator it = mergedNodes.find(node);
596
- return it != mergedNodes.end();
597
- };
598
- inline void setMergedNode(NodeID node)
599
- {
600
- if (!isaMergedNode(node))
601
- mergedNodes.insert(node);
602
- };
603
- //@}
604
-
605
- virtual void solveWorklist();
606
- virtual void mergeSCC(NodeID nodeId);
607
- void mergeNodeAndPts(NodeID node, NodeID tgt);
608
-
609
- };
610
-
611
-
612
-
613
- /*!
614
- * Hybrid Lazy Cycle Detection Based Andersen Analysis
615
- */
616
- class AndersenHLCD : public AndersenHCD, public AndersenLCD
617
- {
618
-
619
- private:
620
- static AndersenHLCD* hlcdAndersen;
621
-
622
- public:
623
- AndersenHLCD(SVFIR* _pag, PTATY type = AndersenHLCD_WPA) :
624
- Andersen(_pag, type), AndersenHCD(_pag, type), AndersenLCD(_pag, type)
625
- {
626
- }
627
-
628
- /// Create an singleton instance directly instead of invoking llvm pass manager
629
- static AndersenHLCD *createAndersenHLCD(SVFIR* _pag)
630
- {
631
- if (hlcdAndersen == nullptr)
632
- {
633
- hlcdAndersen = new AndersenHLCD(_pag);
634
- hlcdAndersen->analyze();
635
- return hlcdAndersen;
636
- }
637
- return hlcdAndersen;
638
- }
639
-
640
- static void releaseAndersenHLCD()
641
- {
642
- if (hlcdAndersen)
643
- delete hlcdAndersen;
644
- hlcdAndersen = nullptr;
645
- }
646
-
647
- protected:
648
- void initialize()
649
- {
650
- AndersenHCD::initialize();
651
- }
652
- void solveWorklist()
653
- {
654
- AndersenHCD::solveWorklist();
655
- }
656
- void handleCopyGep(ConstraintNode* node)
657
- {
658
- AndersenLCD::handleCopyGep(node);
659
- }
660
- void mergeSCC(NodeID nodeId);
661
- bool mergeSrcToTgt(NodeID nodeId, NodeID newRepId)
662
- {
663
- return AndersenLCD::mergeSrcToTgt(nodeId, newRepId);
664
- }
665
-
666
- };
667
-
668
448
  } // End namespace SVF
669
449
 
670
450
  #endif /* ANDERSENPASS_H_ */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-lib",
3
- "version": "1.0.1132",
3
+ "version": "1.0.1135",
4
4
  "description": "SVF's npm support",
5
5
  "main": "index.js",
6
6
  "scripts": {