svf-tools 1.0.310 → 1.0.314
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.
- package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/AndersenHLCD_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +6 -6
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +21 -21
- package/SVF-doxygen/html/html/AndersenWaveDiffWithType_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/Andersen_8cpp.html +1 -0
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +58 -56
- package/SVF-doxygen/html/html/Andersen_8h_source.html +118 -118
- package/SVF-doxygen/html/html/CHG_8cpp.html +3 -3
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +49 -50
- package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +17 -16
- package/SVF-doxygen/html/html/CPPUtil_8h_source.html +16 -16
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/CallGraphBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/ConsG_8h_source.html +7 -7
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/DCHG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +10 -10
- package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ExternalPAG_8cpp.html +1 -1
- package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/ExternalPAG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +5 -5
- package/SVF-doxygen/html/html/GenericGraph_8h_source.html +82 -81
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGStat_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ICFG_8h_source.html +6 -6
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +4 -4
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +1 -2
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemModelBuilder_8cpp.html +90 -0
- package/SVF-doxygen/html/html/MemModelBuilder_8cpp_source.html +205 -0
- package/SVF-doxygen/html/html/MemModelBuilder_8h.html +97 -0
- package/SVF-doxygen/html/html/MemModelBuilder_8h_source.html +105 -0
- package/SVF-doxygen/html/html/MemModel_8cpp_source.html +9 -53
- package/SVF-doxygen/html/html/MemModel_8h_source.html +44 -44
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +12 -12
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Options_8cpp_source.html +1 -2
- package/SVF-doxygen/html/html/Options_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +25 -25
- package/SVF-doxygen/html/html/PAGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PAGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PAGNode_8h_source.html +11 -11
- package/SVF-doxygen/html/html/PAG_8cpp_source.html +34 -34
- package/SVF-doxygen/html/html/PAG_8h_source.html +41 -41
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +24 -24
- package/SVF-doxygen/html/html/PTAType_8h_source.html +4 -4
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +34 -33
- package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +7 -7
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +66 -66
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +7 -7
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +8 -8
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SVFG_8h_source.html +7 -7
- package/SVF-doxygen/html/html/SVFModule_8cpp.html +1 -1
- package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +6 -5
- package/SVF-doxygen/html/html/SVFModule_8h.html +3 -0
- package/SVF-doxygen/html/html/SVFModule_8h_source.html +53 -46
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Steensgaard_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +5 -55
- package/SVF-doxygen/html/html/SymbolTableInfo_8h.html +0 -4
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +88 -101
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/TCT_8h_source.html +10 -10
- package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/VFG_8h_source.html +6 -6
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/html/annotated.html +135 -136
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +228 -228
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +60 -58
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +52 -52
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +38 -38
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +38 -38
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +73 -72
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +123 -120
- package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +115 -115
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DummyValPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +44 -44
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.html +47 -47
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +58 -57
- package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocSymTableInfo.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder-members.html +95 -0
- package/SVF-doxygen/html/html/classSVF_1_1MemModelBuilder.html +711 -0
- package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +7 -10
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +92 -199
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +8 -10
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +68 -168
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PAG.html +67 -67
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +41 -41
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PAGEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PAGNode.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +39 -38
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +153 -116
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule-members.html +1 -0
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +113 -80
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +49 -55
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +300 -587
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1TypeSystem.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +11 -11
- package/SVF-doxygen/html/html/classes.html +91 -91
- package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
- package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/dir_5840dc76920ee0f379cd88b55fa041fd.html +1 -1
- package/SVF-doxygen/html/html/dir_770a542efe75a1b68c109cb4e4290224.html +1 -1
- package/SVF-doxygen/html/html/files.html +2 -2
- package/SVF-doxygen/html/html/functions_0x7e.html +5 -8
- package/SVF-doxygen/html/html/functions_a.html +13 -10
- package/SVF-doxygen/html/html/functions_b.html +1 -1
- package/SVF-doxygen/html/html/functions_c.html +38 -36
- package/SVF-doxygen/html/html/functions_e.html +1 -1
- package/SVF-doxygen/html/html/functions_f.html +3 -3
- package/SVF-doxygen/html/html/functions_func.html +12 -9
- package/SVF-doxygen/html/html/functions_func_0x7e.html +5 -8
- package/SVF-doxygen/html/html/functions_func_b.html +1 -1
- package/SVF-doxygen/html/html/functions_func_c.html +28 -26
- package/SVF-doxygen/html/html/functions_func_e.html +1 -1
- package/SVF-doxygen/html/html/functions_func_g.html +11 -13
- package/SVF-doxygen/html/html/functions_func_h.html +3 -3
- package/SVF-doxygen/html/html/functions_func_i.html +8 -7
- package/SVF-doxygen/html/html/functions_func_l.html +2 -8
- package/SVF-doxygen/html/html/functions_func_m.html +4 -1
- package/SVF-doxygen/html/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/html/functions_func_s.html +8 -5
- package/SVF-doxygen/html/html/functions_func_v.html +0 -3
- package/SVF-doxygen/html/html/functions_g.html +6 -8
- package/SVF-doxygen/html/html/functions_h.html +3 -3
- package/SVF-doxygen/html/html/functions_i.html +15 -14
- package/SVF-doxygen/html/html/functions_l.html +6 -10
- package/SVF-doxygen/html/html/functions_m.html +5 -1
- package/SVF-doxygen/html/html/functions_n.html +4 -4
- package/SVF-doxygen/html/html/functions_o.html +3 -3
- package/SVF-doxygen/html/html/functions_p.html +13 -9
- package/SVF-doxygen/html/html/functions_r.html +1 -1
- package/SVF-doxygen/html/html/functions_rela.html +3 -0
- package/SVF-doxygen/html/html/functions_s.html +20 -14
- package/SVF-doxygen/html/html/functions_t.html +4 -4
- package/SVF-doxygen/html/html/functions_u.html +3 -3
- package/SVF-doxygen/html/html/functions_v.html +2 -5
- package/SVF-doxygen/html/html/functions_vars_l.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_s.html +2 -1
- package/SVF-doxygen/html/html/functions_w.html +3 -1
- package/SVF-doxygen/html/html/hierarchy.html +127 -128
- package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
- package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +1 -3
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +40 -39
- package/SVF-doxygen/html/html/saber_8cpp.html +1 -1
- package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +3 -2
- package/SVF-doxygen/html/html/search/all_10.js +9 -9
- package/SVF-doxygen/html/html/search/all_12.js +2 -2
- package/SVF-doxygen/html/html/search/all_13.js +9 -8
- package/SVF-doxygen/html/html/search/all_14.js +6 -6
- package/SVF-doxygen/html/html/search/all_15.js +2 -2
- package/SVF-doxygen/html/html/search/all_16.js +0 -1
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_1b.js +3 -4
- package/SVF-doxygen/html/html/search/all_2.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +11 -10
- package/SVF-doxygen/html/html/search/all_5.js +1 -1
- package/SVF-doxygen/html/html/search/all_6.js +1 -1
- package/SVF-doxygen/html/html/search/all_7.js +2 -2
- package/SVF-doxygen/html/html/search/all_8.js +3 -3
- package/SVF-doxygen/html/html/search/all_9.js +4 -3
- package/SVF-doxygen/html/html/search/all_c.js +4 -7
- package/SVF-doxygen/html/html/search/all_d.js +4 -1
- package/SVF-doxygen/html/html/search/all_e.js +2 -2
- package/SVF-doxygen/html/html/search/all_f.js +1 -1
- package/SVF-doxygen/html/html/search/classes_9.js +1 -3
- package/SVF-doxygen/html/html/search/classes_a.js +1 -0
- package/SVF-doxygen/html/html/search/files_8.js +1 -3
- package/SVF-doxygen/html/html/search/files_9.js +2 -0
- package/SVF-doxygen/html/html/search/functions_0.js +3 -2
- package/SVF-doxygen/html/html/search/functions_1.js +1 -1
- package/SVF-doxygen/html/html/search/functions_10.js +1 -0
- package/SVF-doxygen/html/html/search/functions_13.js +0 -1
- package/SVF-doxygen/html/html/search/functions_16.js +3 -4
- package/SVF-doxygen/html/html/search/functions_2.js +10 -9
- package/SVF-doxygen/html/html/search/functions_4.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +2 -2
- package/SVF-doxygen/html/html/search/functions_7.js +3 -3
- package/SVF-doxygen/html/html/search/functions_8.js +2 -1
- package/SVF-doxygen/html/html/search/functions_a.js +1 -3
- package/SVF-doxygen/html/html/search/functions_b.js +2 -1
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/related_3.js +1 -0
- package/SVF-doxygen/html/html/search/variables_13.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +2 -2
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +12 -12
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PAG_01_5_01_4.html +17 -17
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_4_01_4.html +14 -14
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericGraph_3_01NodeTy_00_01EdgeTy_01_4_01_5_4.html +20 -20
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_01_4.html +16 -16
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +8 -7
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +6 -5
- package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
- package/include/Graphs/GenericGraph.h +5 -8
- package/include/MemoryModel/MemModel.h +5 -21
- package/include/MemoryModel/PersistentPointsToCache.h +13 -7
- package/include/MemoryModel/PointerAnalysisImpl.h +1 -0
- package/include/SVF-FE/CHG.h +1 -1
- package/include/SVF-FE/MemModelBuilder.h +102 -0
- package/include/SVF-FE/SymbolTableInfo.h +12 -79
- package/include/Util/NodeIDAllocator.h +1 -1
- package/include/Util/SVFModule.h +16 -0
- package/include/WPA/Andersen.h +2 -7
- package/lib/Graphs/PAG.cpp +3 -10
- package/lib/MemoryModel/MemModel.cpp +10 -436
- package/lib/SVF-FE/CHG.cpp +0 -6
- package/lib/SVF-FE/CPPUtil.cpp +2 -0
- package/lib/SVF-FE/MemModelBuilder.cpp +616 -0
- package/lib/SVF-FE/SymbolTableInfo.cpp +10 -453
- package/lib/Util/NodeIDAllocator.cpp +2 -1
- package/lib/Util/Options.cpp +2 -10
- package/lib/Util/SVFModule.cpp +3 -2
- package/lib/WPA/Andersen.cpp +13 -1
- package/package.json +1 -1
- package/tools/Example/svf-ex.cpp +6 -3
- package/include/SVF-FE/LocMemModel.h +0 -35
- package/lib/SVF-FE/LocMemModel.cpp +0 -31
|
@@ -79,14 +79,14 @@ $(function() {
|
|
|
79
79
|
<div class="ttc" id="namespaceSVF_html_ad8794eb3c00de3d3b5c5e43dded3fb42"><div class="ttname"><a href="namespaceSVF.html#ad8794eb3c00de3d3b5c5e43dded3fb42">SVF::ScalarEvolution</a></div><div class="ttdeci">llvm::ScalarEvolution ScalarEvolution</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00190">BasicTypes.h:190</a></div></div>
|
|
80
80
|
<div class="ttc" id="classSVF_1_1TCT_html_a3123719a96acbefe0e9944c68ba44185"><div class="ttname"><a href="classSVF_1_1TCT.html#a3123719a96acbefe0e9944c68ba44185">SVF::TCT::FunSet</a></div><div class="ttdeci">Set< const Function * > FunSet</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00122">TCT.h:122</a></div></div>
|
|
81
81
|
<div class="ttc" id="classSVF_1_1TCT_html_a002bac3dc928bc78b94de0ca97b1ec1d"><div class="ttname"><a href="classSVF_1_1TCT.html#a002bac3dc928bc78b94de0ca97b1ec1d">SVF::TCT::pushToCTPWorkList</a></div><div class="ttdeci">bool pushToCTPWorkList(const CxtThreadProc &ctp)</div><div class="ttdoc">WorkList helper functions. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00509">TCT.h:509</a></div></div>
|
|
82
|
-
<div class="ttc" id="classSVF_1_1GenericNode_html_afc8b5f86d7795b6a0dfc0687d942d79b"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">SVF::GenericNode::getInEdges</a></div><div class="ttdeci">const GEdgeSetTy & getInEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
82
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_afc8b5f86d7795b6a0dfc0687d942d79b"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">SVF::GenericNode::getInEdges</a></div><div class="ttdeci">const GEdgeSetTy & getInEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00182">GenericGraph.h:182</a></div></div>
|
|
83
83
|
<div class="ttc" id="classSVF_1_1TCT_html_a11e36f9b58646dee4014e12e55c70508"><div class="ttname"><a href="classSVF_1_1TCT.html#a11e36f9b58646dee4014e12e55c70508">SVF::TCT::setMultiForkedAttrs</a></div><div class="ttdeci">void setMultiForkedAttrs(CxtThread &ct)</div><div class="ttdoc">Set multi-forked thread attributes. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00480">TCT.h:480</a></div></div>
|
|
84
84
|
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
|
|
85
85
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
86
86
|
<div class="ttc" id="classSVF_1_1TCTEdge_html_a18644ee9ae37b03254afb077dca5494f"><div class="ttname"><a href="classSVF_1_1TCTEdge.html#a18644ee9ae37b03254afb077dca5494f">SVF::TCTEdge::CEDGEK</a></div><div class="ttdeci">CEDGEK</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00034">TCT.h:34</a></div></div>
|
|
87
87
|
<div class="ttc" id="classSVF_1_1TCT_html_a511c2ee4cfdc01a720135b2cd493fe3b"><div class="ttname"><a href="classSVF_1_1TCT.html#a511c2ee4cfdc01a720135b2cd493fe3b">SVF::TCT::getChildrenBegin</a></div><div class="ttdeci">ThreadCreateEdgeSet::const_iterator getChildrenBegin(const TCTNode *node) const</div><div class="ttdoc">Get children and parent nodes. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00185">TCT.h:185</a></div></div>
|
|
88
88
|
<div class="ttc" id="classSVF_1_1TCT_html_aa87bfebf48f9e74655ab3db4ec1576b3"><div class="ttname"><a href="classSVF_1_1TCT.html#aa87bfebf48f9e74655ab3db4ec1576b3">SVF::TCT::addTCTEdge</a></div><div class="ttdeci">bool addTCTEdge(TCTNode *src, TCTNode *dst)</div><div class="ttdoc">Add TCT edge. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00410">TCT.h:410</a></div></div>
|
|
89
|
-
<div class="ttc" id="classSVF_1_1GenericNode_html_aa4f103330118c8976bf95e4bf53416eb"><div class="ttname"><a href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">SVF::GenericNode::OutEdgeBegin</a></div><div class="ttdeci">iterator OutEdgeBegin()</div><div class="ttdoc">iterators </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
89
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_aa4f103330118c8976bf95e4bf53416eb"><div class="ttname"><a href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">SVF::GenericNode::OutEdgeBegin</a></div><div class="ttdeci">iterator OutEdgeBegin()</div><div class="ttdoc">iterators </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00202">GenericGraph.h:202</a></div></div>
|
|
90
90
|
<div class="ttc" id="classSVF_1_1TCT_html_a54cceb577b4fb89c1d84011ec4d2fe2c"><div class="ttname"><a href="classSVF_1_1TCT.html#a54cceb577b4fb89c1d84011ec4d2fe2c">SVF::TCT::getMakredProcs</a></div><div class="ttdeci">const FunSet & getMakredProcs() const</div><div class="ttdoc">Get marked candidate functions. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00204">TCT.h:204</a></div></div>
|
|
91
91
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
92
92
|
<div class="ttc" id="classSVF_1_1TCT_html_a7c53c7ff773a253976374392d4930d6e"><div class="ttname"><a href="classSVF_1_1TCT.html#a7c53c7ff773a253976374392d4930d6e">SVF::TCT::ThreadCreateEdgeSet</a></div><div class="ttdeci">TCTEdge::ThreadCreateEdgeSet ThreadCreateEdgeSet</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00120">TCT.h:120</a></div></div>
|
|
@@ -109,9 +109,9 @@ $(function() {
|
|
|
109
109
|
<div class="ttc" id="classSVF_1_1TCTNode_html"><div class="ttname"><a href="classSVF_1_1TCTNode.html">SVF::TCTNode</a></div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00066">TCT.h:66</a></div></div>
|
|
110
110
|
<div class="ttc" id="classSVF_1_1TCT_html_a80dad1dfdf64cb7a5805eb8bedf79226"><div class="ttname"><a href="classSVF_1_1TCT.html#a80dad1dfdf64cb7a5805eb8bedf79226">SVF::TCT::ctpList</a></div><div class="ttdeci">CxtThreadProcVec ctpList</div><div class="ttdoc">Thread call graph SCC. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00539">TCT.h:539</a></div></div>
|
|
111
111
|
<div class="ttc" id="classSVF_1_1TCTNode_html_a8f2ef1020b45aada8b79ac3b8d27c2a6"><div class="ttname"><a href="classSVF_1_1TCTNode.html#a8f2ef1020b45aada8b79ac3b8d27c2a6">SVF::TCTNode::ctx</a></div><div class="ttdeci">const CxtThread ctx</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00108">TCT.h:108</a></div></div>
|
|
112
|
-
<div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#
|
|
112
|
+
<div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
|
|
113
113
|
<div class="ttc" id="classSVF_1_1TCT_html_a4d26418c050876eb365af0ee31d3922c"><div class="ttname"><a href="classSVF_1_1TCT.html#a4d26418c050876eb365af0ee31d3922c">SVF::TCT::addTCTNode</a></div><div class="ttdeci">TCTNode * addTCTNode(const CxtThread &ct)</div><div class="ttdoc">Add TCT node. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00399">TCT.h:399</a></div></div>
|
|
114
|
-
<div class="ttc" id="classSVF_1_1GenericNode_html_ae5b113921530eee6afe58a65d8e5b3a7"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">SVF::GenericNode::InEdgeBegin</a></div><div class="ttdeci">iterator InEdgeBegin()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
114
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_ae5b113921530eee6afe58a65d8e5b3a7"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">SVF::GenericNode::InEdgeBegin</a></div><div class="ttdeci">iterator InEdgeBegin()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00210">GenericGraph.h:210</a></div></div>
|
|
115
115
|
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
|
|
116
116
|
<div class="ttc" id="classSVF_1_1TCT_html_afa5bd475c4dc068a0ecc0ec5caab77a9"><div class="ttname"><a href="classSVF_1_1TCT.html#afa5bd475c4dc068a0ecc0ec5caab77a9">SVF::TCT::getParentsBegin</a></div><div class="ttdeci">ThreadCreateEdgeSet::const_iterator getParentsBegin(const TCTNode *node) const</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00193">TCT.h:193</a></div></div>
|
|
117
117
|
<div class="ttc" id="namespaceSVF_html_a07db688cc13384ddfddb1372612db205"><div class="ttname"><a href="namespaceSVF.html#a07db688cc13384ddfddb1372612db205">SVF::GenericTCTEdgeTy</a></div><div class="ttdeci">GenericEdge< TCTNode > GenericTCTEdgeTy</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00023">TCT.h:23</a></div></div>
|
|
@@ -156,8 +156,8 @@ $(function() {
|
|
|
156
156
|
<div class="ttc" id="classSVF_1_1TCT_html_a334c1e8201fbb5cf4fe03cfccae30af2"><div class="ttname"><a href="classSVF_1_1TCT.html#a334c1e8201fbb5cf4fe03cfccae30af2">SVF::TCT::CxtThreadToForkCxt</a></div><div class="ttdeci">Map< CxtThread, CallStrCxt > CxtThreadToForkCxt</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00127">TCT.h:127</a></div></div>
|
|
157
157
|
<div class="ttc" id="classSVF_1_1TCT_html_af47837e30a80e8d6684f3ee6001afb7a"><div class="ttname"><a href="classSVF_1_1TCT.html#af47837e30a80e8d6684f3ee6001afb7a">SVF::TCT::getChildrenEnd</a></div><div class="ttdeci">ThreadCreateEdgeSet::const_iterator getChildrenEnd(const TCTNode *node) const</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00189">TCT.h:189</a></div></div>
|
|
158
158
|
<div class="ttc" id="classSVF_1_1TCT_html_a95cd490d37f8831edc6910f7ecdf413e"><div class="ttname"><a href="classSVF_1_1TCT.html#a95cd490d37f8831edc6910f7ecdf413e">SVF::TCT::inSameCallGraphSCC</a></div><div class="ttdeci">bool inSameCallGraphSCC(const PTACallGraphNode *src, const PTACallGraphNode *dst)</div><div class="ttdoc">Whether two functions in the same callgraph scc. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00263">TCT.h:263</a></div></div>
|
|
159
|
-
<div class="ttc" id="classSVF_1_1GenericNode_html_afe6a7b286d9af4992f41b59612fd2900"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">SVF::GenericNode::InEdgeEnd</a></div><div class="ttdeci">iterator InEdgeEnd()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
160
|
-
<div class="ttc" id="classSVF_1_1GenericNode_html_ae74283fbc788665296a69e56f334557b"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ae74283fbc788665296a69e56f334557b">SVF::GenericNode::addOutgoingEdge</a></div><div class="ttdeci">bool addOutgoingEdge(EdgeType *outEdge)</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
159
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_afe6a7b286d9af4992f41b59612fd2900"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">SVF::GenericNode::InEdgeEnd</a></div><div class="ttdeci">iterator InEdgeEnd()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00214">GenericGraph.h:214</a></div></div>
|
|
160
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_ae74283fbc788665296a69e56f334557b"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ae74283fbc788665296a69e56f334557b">SVF::GenericNode::addOutgoingEdge</a></div><div class="ttdeci">bool addOutgoingEdge(EdgeType *outEdge)</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00279">GenericGraph.h:279</a></div></div>
|
|
161
161
|
<div class="ttc" id="classSVF_1_1TCT_html_a013f7fa94f9383b3d0e46b79c0a52a8f"><div class="ttname"><a href="classSVF_1_1TCT.html#a013f7fa94f9383b3d0e46b79c0a52a8f">SVF::TCT::isCandidateFun</a></div><div class="ttdeci">bool isCandidateFun(const SVFFunction *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00259">TCT.h:259</a></div></div>
|
|
162
162
|
<div class="ttc" id="namespaceSVF_html_a03d88a0302bcd253387690f13f693f64"><div class="ttname"><a href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">SVF::CallSiteID</a></div><div class="ttdeci">unsigned CallSiteID</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00083">SVFBasicTypes.h:83</a></div></div>
|
|
163
163
|
<div class="ttc" id="namespaceSVF_html_aecbb42b8e9d17fa0189c50dda9fd5fdd"><div class="ttname"><a href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">SVF::DominatorTree</a></div><div class="ttdeci">llvm::DominatorTree DominatorTree</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00197">BasicTypes.h:197</a></div></div>
|
|
@@ -168,7 +168,7 @@ $(function() {
|
|
|
168
168
|
<div class="ttc" id="classSVF_1_1GenericEdge_html_aa41cb7482bdab1ba328f4b94f30f3ee4"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aa41cb7482bdab1ba328f4b94f30f3ee4">SVF::GenericEdge::dst</a></div><div class="ttdeci">NodeTy * dst</div><div class="ttdoc">destination node </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00056">GenericGraph.h:56</a></div></div>
|
|
169
169
|
<div class="ttc" id="classSVF_1_1CxtThread_html_adde663205c3ecc5a2e01b18bc305d5cb"><div class="ttname"><a href="classSVF_1_1CxtThread.html#adde663205c3ecc5a2e01b18bc305d5cb">SVF::CxtThread::setIncycle</a></div><div class="ttdeci">void setIncycle(bool in)</div><div class="ttdef"><b>Definition:</b> <a href="CxtStmt_8h_source.html#l00267">CxtStmt.h:267</a></div></div>
|
|
170
170
|
<div class="ttc" id="classSVF_1_1TCT_html_a60e63f6ddfe78c4cf4fd3a70875b727f"><div class="ttname"><a href="classSVF_1_1TCT.html#a60e63f6ddfe78c4cf4fd3a70875b727f">SVF::TCT::getSiblingThread</a></div><div class="ttdeci">const NodeBS getSiblingThread(NodeID tid) const</div><div class="ttdoc">Get sibling threads. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00307">TCT.h:307</a></div></div>
|
|
171
|
-
<div class="ttc" id="classSVF_1_1GenericNode_html_a93d217b0c9fd8008a2989ca2b4f3fbfb"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a93d217b0c9fd8008a2989ca2b4f3fbfb">SVF::GenericNode::addIncomingEdge</a></div><div class="ttdeci">bool addIncomingEdge(EdgeType *inEdge)</div><div class="ttdoc">Add incoming and outgoing edges. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
171
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_a93d217b0c9fd8008a2989ca2b4f3fbfb"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a93d217b0c9fd8008a2989ca2b4f3fbfb">SVF::GenericNode::addIncomingEdge</a></div><div class="ttdeci">bool addIncomingEdge(EdgeType *inEdge)</div><div class="ttdoc">Add incoming and outgoing edges. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00275">GenericGraph.h:275</a></div></div>
|
|
172
172
|
<div class="ttc" id="classSVF_1_1TCTEdge_html_a38d3af1f146d4e70574874c7ec28f6f3"><div class="ttname"><a href="classSVF_1_1TCTEdge.html#a38d3af1f146d4e70574874c7ec28f6f3">SVF::TCTEdge::classof</a></div><div class="ttdeci">static bool classof(const TCTEdge *)</div><div class="ttdoc">Classof. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00049">TCT.h:49</a></div></div>
|
|
173
173
|
<div class="ttc" id="classSVF_1_1TCT_html_a980de0593e41d18d2716aa5120d35d04"><div class="ttname"><a href="classSVF_1_1TCT.html#a980de0593e41d18d2716aa5120d35d04">SVF::TCT::pta</a></div><div class="ttdeci">PointerAnalysis * pta</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00393">TCT.h:393</a></div></div>
|
|
174
174
|
<div class="ttc" id="classSVF_1_1CxtThread_html_aa4e1a9babb249a005e8dfae8cb83df21"><div class="ttname"><a href="classSVF_1_1CxtThread.html#aa4e1a9babb249a005e8dfae8cb83df21">SVF::CxtThread::setInloop</a></div><div class="ttdeci">void setInloop(bool in)</div><div class="ttdoc">inloop, incycle attributes </div><div class="ttdef"><b>Definition:</b> <a href="CxtStmt_8h_source.html#l00259">CxtStmt.h:259</a></div></div>
|
|
@@ -196,15 +196,15 @@ $(function() {
|
|
|
196
196
|
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
|
|
197
197
|
<div class="ttc" id="classSVF_1_1TCT_html"><div class="ttname"><a href="classSVF_1_1TCT.html">SVF::TCT</a></div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00116">TCT.h:116</a></div></div>
|
|
198
198
|
<div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00313">BasicTypes.h:313</a></div></div>
|
|
199
|
-
<div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
199
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
|
|
200
200
|
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00086">SVFBasicTypes.h:86</a></div></div>
|
|
201
201
|
<div class="ttc" id="classSVF_1_1TCT_html_a23df579f18d4ea4b0f47272091ddc43e"><div class="ttname"><a href="classSVF_1_1TCT.html#a23df579f18d4ea4b0f47272091ddc43e">SVF::TCT::CxtThreadProcVec</a></div><div class="ttdeci">FIFOWorkList< CxtThreadProc > CxtThreadProcVec</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00130">TCT.h:130</a></div></div>
|
|
202
202
|
<div class="ttc" id="classSVF_1_1TCT_html_aea88fdb40c28724546f5903d3a73999a"><div class="ttname"><a href="classSVF_1_1TCT.html#aea88fdb40c28724546f5903d3a73999a">SVF::TCT::ctToForkCxtMap</a></div><div class="ttdeci">CxtThreadToForkCxt ctToForkCxtMap</div><div class="ttdoc">Map a ctp to its graph node. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00542">TCT.h:542</a></div></div>
|
|
203
203
|
<div class="ttc" id="structllvm_1_1GraphTraits_3_01SVF_1_1TCT_01_5_01_4_html_a064d2e7841d3ad3fce45f8b99f37001b"><div class="ttname"><a href="structllvm_1_1GraphTraits_3_01SVF_1_1TCT_01_5_01_4.html#a064d2e7841d3ad3fce45f8b99f37001b">llvm::GraphTraits< SVF::TCT * >::NodeRef</a></div><div class="ttdeci">SVF::TCTNode * NodeRef</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00570">TCT.h:570</a></div></div>
|
|
204
|
-
<div class="ttc" id="classSVF_1_1GenericGraph_html"><div class="ttname"><a href="classSVF_1_1GenericGraph.html">SVF::GenericGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
204
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html"><div class="ttname"><a href="classSVF_1_1GenericGraph.html">SVF::GenericGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00327">GenericGraph.h:327</a></div></div>
|
|
205
205
|
<div class="ttc" id="namespaceSVF_html_a115fc72b31d2ae72e60ebd9af1351e83"><div class="ttname"><a href="namespaceSVF.html#a115fc72b31d2ae72e60ebd9af1351e83">SVF::GenericTCTNodeTy</a></div><div class="ttdeci">GenericNode< TCTNode, TCTEdge > GenericTCTNodeTy</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00065">TCT.h:65</a></div></div>
|
|
206
206
|
<div class="ttc" id="classSVF_1_1PTACallGraphNode_html"><div class="ttname"><a href="classSVF_1_1PTACallGraphNode.html">SVF::PTACallGraphNode</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00174">PTACallGraph.h:174</a></div></div>
|
|
207
|
-
<div class="ttc" id="classSVF_1_1GenericNode_html_a19a3366fd8a58290d0c740c46c3dcb3d"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">SVF::GenericNode::OutEdgeEnd</a></div><div class="ttdeci">iterator OutEdgeEnd()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
207
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_a19a3366fd8a58290d0c740c46c3dcb3d"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">SVF::GenericNode::OutEdgeEnd</a></div><div class="ttdeci">iterator OutEdgeEnd()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00206">GenericGraph.h:206</a></div></div>
|
|
208
208
|
<div class="ttc" id="classSVF_1_1TCTNode_html_a42dde4c3714cc5605f7c0e76cfd4a74c"><div class="ttname"><a href="classSVF_1_1TCTNode.html#a42dde4c3714cc5605f7c0e76cfd4a74c">SVF::TCTNode::isIncycle</a></div><div class="ttdeci">bool isIncycle() const</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00093">TCT.h:93</a></div></div>
|
|
209
209
|
<div class="ttc" id="classSVF_1_1TCT_html_a402dd078c46efc1d7348d81b45e347f2"><div class="ttname"><a href="classSVF_1_1TCT.html#a402dd078c46efc1d7348d81b45e347f2">SVF::TCT::visitedCTPs</a></div><div class="ttdeci">CxtThreadProcSet visitedCTPs</div><div class="ttdoc">CxtThreadProc List. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00540">TCT.h:540</a></div></div>
|
|
210
210
|
<div class="ttc" id="classSVF_1_1CallBlockNode_html"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html">SVF::CallBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
|
|
@@ -66,19 +66,19 @@ $(function() {
|
|
|
66
66
|
<div class="title">ThreadAPI.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="ThreadAPI_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- ThreadAPI.cpp -- Thread API-------------------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2017> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * ThreadAPI.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: Jan 21, 2014</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Yulei Sui, dye</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifndef THREADAPI_CPP_</span></div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="ThreadAPI_8cpp.html#a2edb48ac961ebb1eb8937424c6b273f1"> 31</a></span> <span class="preprocessor">#define THREADAPI_CPP_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="ThreadAPI_8h.html">Util/ThreadAPI.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <iostream></span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <stdio.h></span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <iomanip></span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* ThreadAPI::tdAPI = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">namespace</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">struct </span>ei_pair</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *n;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3">ThreadAPI::TD_TYPE</a> t;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> };</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> } <span class="comment">// End anonymous namespace</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment">//Each (name, type) pair will be inserted into the map.</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">//All entries of the same type must occur together (for error detection).</span></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="ThreadAPI_8cpp.html#aa5c38361a7f02befa83ea45388056ea1"> 59</a></span> <span class="keyword">static</span> <span class="keyword">const</span> ei_pair <a class="code" href="ThreadAPI_8cpp.html#aa5c38361a7f02befa83ea45388056ea1">ei_pairs</a>[]=</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="comment">//The current llvm-gcc puts in the \01.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {<span class="stringliteral">"pthread_create"</span>, ThreadAPI::TD_FORK},</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {<span class="stringliteral">"apr_thread_create"</span>, ThreadAPI::TD_FORK},</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {<span class="stringliteral">"pthread_join"</span>, ThreadAPI::TD_JOIN},</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {<span class="stringliteral">"\01_pthread_join"</span>, ThreadAPI::TD_JOIN},</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  {<span class="stringliteral">"pthread_cancel"</span>, ThreadAPI::TD_JOIN},</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {<span class="stringliteral">"pthread_mutex_lock"</span>, ThreadAPI::TD_ACQUIRE},</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {<span class="stringliteral">"pthread_rwlock_rdlock"</span>, ThreadAPI::TD_ACQUIRE},</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {<span class="stringliteral">"sem_wait"</span>, ThreadAPI::TD_ACQUIRE},</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {<span class="stringliteral">"_spin_lock"</span>, ThreadAPI::TD_ACQUIRE},</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {<span class="stringliteral">"SRE_SplSpecLockEx"</span>, ThreadAPI::TD_ACQUIRE},</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {<span class="stringliteral">"pthread_mutex_trylock"</span>, ThreadAPI::TD_TRY_ACQUIRE},</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  {<span class="stringliteral">"pthread_mutex_unlock"</span>, ThreadAPI::TD_RELEASE},</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {<span class="stringliteral">"pthread_rwlock_unlock"</span>, ThreadAPI::TD_RELEASE},</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  {<span class="stringliteral">"sem_post"</span>, ThreadAPI::TD_RELEASE},</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {<span class="stringliteral">"_spin_unlock"</span>, ThreadAPI::TD_RELEASE},</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {<span class="stringliteral">"SRE_SplSpecUnlockEx"</span>, ThreadAPI::TD_RELEASE},</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// {"pthread_cancel", ThreadAPI::TD_CANCEL},</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {<span class="stringliteral">"pthread_exit"</span>, ThreadAPI::TD_EXIT},</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {<span class="stringliteral">"pthread_detach"</span>, ThreadAPI::TD_DETACH},</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  {<span class="stringliteral">"pthread_cond_wait"</span>, ThreadAPI::TD_COND_WAIT},</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {<span class="stringliteral">"pthread_cond_signal"</span>, ThreadAPI::TD_COND_SIGNAL},</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  {<span class="stringliteral">"pthread_cond_broadcast"</span>, ThreadAPI::TD_COND_BROADCAST},</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {<span class="stringliteral">"pthread_cond_init"</span>, ThreadAPI::TD_CONDVAR_INI},</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {<span class="stringliteral">"pthread_cond_destroy"</span>, ThreadAPI::TD_CONDVAR_DESTROY},</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {<span class="stringliteral">"pthread_mutex_init"</span>, ThreadAPI::TD_MUTEX_INI},</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {<span class="stringliteral">"pthread_mutex_destroy"</span>, ThreadAPI::TD_MUTEX_DESTROY},</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {<span class="stringliteral">"pthread_barrier_init"</span>, ThreadAPI::TD_BAR_INIT},</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {<span class="stringliteral">"pthread_barrier_wait"</span>, ThreadAPI::TD_BAR_WAIT},</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">// Hare APIs</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {<span class="stringliteral">"hare_parallel_for"</span>, ThreadAPI::HARE_PAR_FOR},</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">//This must be the last entry.</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {0, ThreadAPI::TD_DUMMY}</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> };</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a4535862f26efff9f45236000507932c9"> 101</a></span> <span class="keywordtype">void</span> ThreadAPI::init()</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  set<TD_TYPE> t_seen;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3">TD_TYPE</a> prev_t= TD_DUMMY;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  t_seen.insert(TD_DUMMY);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">for</span>(<span class="keyword">const</span> ei_pair *p= ei_pairs; p->n; ++p)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">if</span>(p->t != prev_t)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="comment">//This will detect if you move an entry to another block</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="comment">// but forget to change the type.</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">if</span>(t_seen.count(p->t))</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  fputs(p->n, stderr);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  putc(<span class="charliteral">'\n'</span>, stderr);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">"ei_pairs not grouped by type"</span>);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  t_seen.insert(p->t);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  prev_t= p->t;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span>(tdAPIMap.count(p->n))</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  fputs(p->n, stderr);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  putc(<span class="charliteral">'\n'</span>, stderr);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">"duplicate name in ei_pairs"</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  tdAPIMap[p->n]= p->t;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba"> 134</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">ThreadAPI::getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keyword"></span>{</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(inst);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ab2c517ddae02fbb80f56ddc609b2f5ef"> 142</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">ThreadAPI::getCallee</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keyword"></span>{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(cs);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512"> 150</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">ThreadAPI::getLLVMCallSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keyword"></span>{</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ac07a0ae387ad9ff483fb9e2993d4b69e"> 158</a></span> <span class="keywordtype">void</span> ThreadAPI::statInit(<a class="code" href="namespaceSVF.html#ad5ce5ddecac033fe5309cb929d8dea3a">StringMap</a>& tdAPIStatMap)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  tdAPIStatMap[<span class="stringliteral">"pthread_create"</span>] = 0;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  tdAPIStatMap[<span class="stringliteral">"pthread_join"</span>] = 0;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_lock"</span>] = 0;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_trylock"</span>] = 0;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_unlock"</span>] = 0;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cancel"</span>] = 0;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  tdAPIStatMap[<span class="stringliteral">"pthread_exit"</span>] = 0;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  tdAPIStatMap[<span class="stringliteral">"pthread_detach"</span>] = 0;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_wait"</span>] = 0;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_signal"</span>] = 0;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_broadcast"</span>] = 0;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_init"</span>] = 0;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_destroy"</span>] = 0;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_init"</span>] = 0;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_destroy"</span>] = 0;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  tdAPIStatMap[<span class="stringliteral">"pthread_barrier_init"</span>] = 0;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  tdAPIStatMap[<span class="stringliteral">"pthread_barrier_wait"</span>] = 0;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  tdAPIStatMap[<span class="stringliteral">"hare_parallel_for"</span>] = 0;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a60fba05298bc3bf43ec786255daba4ba"> 198</a></span> <span class="keywordtype">void</span> ThreadAPI::performAPIStat(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <a class="code" href="namespaceSVF.html#ad5ce5ddecac033fe5309cb929d8dea3a">StringMap</a> tdAPIStatMap;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  statInit(tdAPIStatMap);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#aa5a0780c5c69a1e9a0ba902b4ad49714">SVFModule::llvm_iterator</a> it = module-><a class="code" href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">llvmFunBegin</a>(), eit = module-><a class="code" href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">llvmFunEnd</a>(); it != eit;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  ++it)</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a255af6ff30782cb9a548feadb0fe7d6b">inst_iterator</a> II = inst_begin(*it), E = inst_end(*it); II != E;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  ++II)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = &*II;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<CallInst>(inst))</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">getCallee</a>(inst);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3">TD_TYPE</a> type = getType(fun);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">switch</span> (type)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">case</span> TD_FORK:</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  tdAPIStatMap[<span class="stringliteral">"pthread_create"</span>]++;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">case</span> TD_JOIN:</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  tdAPIStatMap[<span class="stringliteral">"pthread_join"</span>]++;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">case</span> TD_ACQUIRE:</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_lock"</span>]++;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">case</span> TD_TRY_ACQUIRE:</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_trylock"</span>]++;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">case</span> TD_RELEASE:</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_unlock"</span>]++;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">case</span> TD_CANCEL:</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cancel"</span>]++;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">case</span> TD_EXIT:</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  tdAPIStatMap[<span class="stringliteral">"pthread_exit"</span>]++;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">case</span> TD_DETACH:</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  tdAPIStatMap[<span class="stringliteral">"pthread_detach"</span>]++;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">case</span> TD_COND_WAIT:</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_wait"</span>]++;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">case</span> TD_COND_SIGNAL:</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_signal"</span>]++;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">case</span> TD_COND_BROADCAST:</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_broadcast"</span>]++;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">case</span> TD_CONDVAR_INI:</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_init"</span>]++;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">case</span> TD_CONDVAR_DESTROY:</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_destroy"</span>]++;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">case</span> TD_MUTEX_INI:</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_init"</span>]++;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">case</span> TD_MUTEX_DESTROY:</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_destroy"</span>]++;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">case</span> TD_BAR_INIT:</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  tdAPIStatMap[<span class="stringliteral">"pthread_barrier_init"</span>]++;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">case</span> TD_BAR_WAIT:</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  tdAPIStatMap[<span class="stringliteral">"pthread_barrier_wait"</span>]++;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">case</span> HARE_PAR_FOR:</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  tdAPIStatMap[<span class="stringliteral">"hare_parallel_for"</span>]++;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">case</span> TD_DUMMY:</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <a class="code" href="namespaceSVF.html#a88fd7387fcf16caf70abe265cdcf90b9">StringRef</a> n(module-><a class="code" href="classSVF_1_1SVFModule.html#aa8bab1ad6cab332fe24066b9cf487344">getModuleIdentifier</a>());</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="namespaceSVF.html#a88fd7387fcf16caf70abe265cdcf90b9">StringRef</a> name = n.split(<span class="charliteral">'/'</span>).second;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  name = name.split(<span class="charliteral">'.'</span>).first;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  std::cout << <span class="stringliteral">"################ (program : "</span> << name.str()</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  << <span class="stringliteral">")###############\n"</span>;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  std::cout.flags(std::ios::left);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordtype">unsigned</span> field_width = 20;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">for</span> (llvm::StringMap<u32_t>::iterator it = tdAPIStatMap.begin(), eit =</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  tdAPIStatMap.end(); it != eit; ++it)</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  std::string apiName = it->first().str();</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="comment">// format out put with width 20 space</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  std::cout << std::setw(field_width) << apiName << <span class="stringliteral">" : "</span> << it->second</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  std::cout << <span class="stringliteral">"#######################################################"</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  << std::endl;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor">#endif </span><span class="comment">/* THREADAPI_CPP_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1SVFModule_html_af38d0f831967d6d8391a4c84e58d6519"><div class="ttname"><a href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">SVF::SVFModule::llvmFunEnd</a></div><div class="ttdeci">llvm_iterator llvmFunEnd()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00127">SVFModule.h:127</a></div></div>
|
|
69
|
+
<a href="ThreadAPI_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- ThreadAPI.cpp -- Thread API-------------------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2017> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * ThreadAPI.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: Jan 21, 2014</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Yulei Sui, dye</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifndef THREADAPI_CPP_</span></div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="ThreadAPI_8cpp.html#a2edb48ac961ebb1eb8937424c6b273f1"> 31</a></span> <span class="preprocessor">#define THREADAPI_CPP_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="ThreadAPI_8h.html">Util/ThreadAPI.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <iostream></span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <stdio.h></span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <iomanip></span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <a class="code" href="classSVF_1_1ThreadAPI.html">ThreadAPI</a>* ThreadAPI::tdAPI = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">namespace</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">struct </span>ei_pair</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *n;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3">ThreadAPI::TD_TYPE</a> t;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> };</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> } <span class="comment">// End anonymous namespace</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment">//Each (name, type) pair will be inserted into the map.</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">//All entries of the same type must occur together (for error detection).</span></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="ThreadAPI_8cpp.html#aa5c38361a7f02befa83ea45388056ea1"> 59</a></span> <span class="keyword">static</span> <span class="keyword">const</span> ei_pair <a class="code" href="ThreadAPI_8cpp.html#aa5c38361a7f02befa83ea45388056ea1">ei_pairs</a>[]=</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="comment">//The current llvm-gcc puts in the \01.</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  {<span class="stringliteral">"pthread_create"</span>, ThreadAPI::TD_FORK},</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {<span class="stringliteral">"apr_thread_create"</span>, ThreadAPI::TD_FORK},</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {<span class="stringliteral">"pthread_join"</span>, ThreadAPI::TD_JOIN},</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {<span class="stringliteral">"\01_pthread_join"</span>, ThreadAPI::TD_JOIN},</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  {<span class="stringliteral">"pthread_cancel"</span>, ThreadAPI::TD_JOIN},</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {<span class="stringliteral">"pthread_mutex_lock"</span>, ThreadAPI::TD_ACQUIRE},</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  {<span class="stringliteral">"pthread_rwlock_rdlock"</span>, ThreadAPI::TD_ACQUIRE},</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {<span class="stringliteral">"sem_wait"</span>, ThreadAPI::TD_ACQUIRE},</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {<span class="stringliteral">"_spin_lock"</span>, ThreadAPI::TD_ACQUIRE},</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {<span class="stringliteral">"SRE_SplSpecLockEx"</span>, ThreadAPI::TD_ACQUIRE},</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  {<span class="stringliteral">"pthread_mutex_trylock"</span>, ThreadAPI::TD_TRY_ACQUIRE},</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  {<span class="stringliteral">"pthread_mutex_unlock"</span>, ThreadAPI::TD_RELEASE},</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  {<span class="stringliteral">"pthread_rwlock_unlock"</span>, ThreadAPI::TD_RELEASE},</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  {<span class="stringliteral">"sem_post"</span>, ThreadAPI::TD_RELEASE},</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {<span class="stringliteral">"_spin_unlock"</span>, ThreadAPI::TD_RELEASE},</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {<span class="stringliteral">"SRE_SplSpecUnlockEx"</span>, ThreadAPI::TD_RELEASE},</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// {"pthread_cancel", ThreadAPI::TD_CANCEL},</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {<span class="stringliteral">"pthread_exit"</span>, ThreadAPI::TD_EXIT},</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {<span class="stringliteral">"pthread_detach"</span>, ThreadAPI::TD_DETACH},</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  {<span class="stringliteral">"pthread_cond_wait"</span>, ThreadAPI::TD_COND_WAIT},</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {<span class="stringliteral">"pthread_cond_signal"</span>, ThreadAPI::TD_COND_SIGNAL},</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  {<span class="stringliteral">"pthread_cond_broadcast"</span>, ThreadAPI::TD_COND_BROADCAST},</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  {<span class="stringliteral">"pthread_cond_init"</span>, ThreadAPI::TD_CONDVAR_INI},</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {<span class="stringliteral">"pthread_cond_destroy"</span>, ThreadAPI::TD_CONDVAR_DESTROY},</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {<span class="stringliteral">"pthread_mutex_init"</span>, ThreadAPI::TD_MUTEX_INI},</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  {<span class="stringliteral">"pthread_mutex_destroy"</span>, ThreadAPI::TD_MUTEX_DESTROY},</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  {<span class="stringliteral">"pthread_barrier_init"</span>, ThreadAPI::TD_BAR_INIT},</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {<span class="stringliteral">"pthread_barrier_wait"</span>, ThreadAPI::TD_BAR_WAIT},</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">// Hare APIs</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  {<span class="stringliteral">"hare_parallel_for"</span>, ThreadAPI::HARE_PAR_FOR},</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">//This must be the last entry.</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {0, ThreadAPI::TD_DUMMY}</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> };</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a4535862f26efff9f45236000507932c9"> 101</a></span> <span class="keywordtype">void</span> ThreadAPI::init()</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> {</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  set<TD_TYPE> t_seen;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3">TD_TYPE</a> prev_t= TD_DUMMY;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  t_seen.insert(TD_DUMMY);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">for</span>(<span class="keyword">const</span> ei_pair *p= ei_pairs; p->n; ++p)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">if</span>(p->t != prev_t)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="comment">//This will detect if you move an entry to another block</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="comment">// but forget to change the type.</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">if</span>(t_seen.count(p->t))</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  fputs(p->n, stderr);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  putc(<span class="charliteral">'\n'</span>, stderr);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">"ei_pairs not grouped by type"</span>);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  t_seen.insert(p->t);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  prev_t= p->t;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span>(tdAPIMap.count(p->n))</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  fputs(p->n, stderr);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  putc(<span class="charliteral">'\n'</span>, stderr);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">"duplicate name in ei_pairs"</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  tdAPIMap[p->n]= p->t;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a08c83946d87ab935bd8bf6fea20792ba"> 134</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">ThreadAPI::getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keyword"></span>{</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(inst);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ab2c517ddae02fbb80f56ddc609b2f5ef"> 142</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">ThreadAPI::getCallee</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs)<span class="keyword"> const</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keyword"></span>{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVFUtil::getCallee</a>(cs);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ad4dfe9563de352bb40fb1028a2851512"> 150</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallSite.html">CallSite</a> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">ThreadAPI::getLLVMCallSite</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst)<span class="keyword"> const</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keyword"></span>{</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVFUtil::getLLVMCallSite</a>(inst);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#ac07a0ae387ad9ff483fb9e2993d4b69e"> 158</a></span> <span class="keywordtype">void</span> ThreadAPI::statInit(<a class="code" href="namespaceSVF.html#ad5ce5ddecac033fe5309cb929d8dea3a">StringMap</a>& tdAPIStatMap)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  tdAPIStatMap[<span class="stringliteral">"pthread_create"</span>] = 0;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  tdAPIStatMap[<span class="stringliteral">"pthread_join"</span>] = 0;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_lock"</span>] = 0;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_trylock"</span>] = 0;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_unlock"</span>] = 0;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cancel"</span>] = 0;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  tdAPIStatMap[<span class="stringliteral">"pthread_exit"</span>] = 0;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  tdAPIStatMap[<span class="stringliteral">"pthread_detach"</span>] = 0;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_wait"</span>] = 0;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_signal"</span>] = 0;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_broadcast"</span>] = 0;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_init"</span>] = 0;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_destroy"</span>] = 0;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_init"</span>] = 0;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_destroy"</span>] = 0;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  tdAPIStatMap[<span class="stringliteral">"pthread_barrier_init"</span>] = 0;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  tdAPIStatMap[<span class="stringliteral">"pthread_barrier_wait"</span>] = 0;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  tdAPIStatMap[<span class="stringliteral">"hare_parallel_for"</span>] = 0;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> }</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="classSVF_1_1ThreadAPI.html#a60fba05298bc3bf43ec786255daba4ba"> 198</a></span> <span class="keywordtype">void</span> ThreadAPI::performAPIStat(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* module)</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <a class="code" href="namespaceSVF.html#ad5ce5ddecac033fe5309cb929d8dea3a">StringMap</a> tdAPIStatMap;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  statInit(tdAPIStatMap);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#aa5a0780c5c69a1e9a0ba902b4ad49714">SVFModule::llvm_iterator</a> it = module-><a class="code" href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">llvmFunBegin</a>(), eit = module-><a class="code" href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">llvmFunEnd</a>(); it != eit;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  ++it)</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a255af6ff30782cb9a548feadb0fe7d6b">inst_iterator</a> II = inst_begin(*it), E = inst_end(*it); II != E;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  ++II)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = &*II;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<CallInst>(inst))</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">getCallee</a>(inst);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <a class="code" href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3">TD_TYPE</a> type = getType(fun);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">switch</span> (type)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">case</span> TD_FORK:</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  tdAPIStatMap[<span class="stringliteral">"pthread_create"</span>]++;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">case</span> TD_JOIN:</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  tdAPIStatMap[<span class="stringliteral">"pthread_join"</span>]++;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">case</span> TD_ACQUIRE:</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_lock"</span>]++;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">case</span> TD_TRY_ACQUIRE:</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_trylock"</span>]++;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">case</span> TD_RELEASE:</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_unlock"</span>]++;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">case</span> TD_CANCEL:</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cancel"</span>]++;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">case</span> TD_EXIT:</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  tdAPIStatMap[<span class="stringliteral">"pthread_exit"</span>]++;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">case</span> TD_DETACH:</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  tdAPIStatMap[<span class="stringliteral">"pthread_detach"</span>]++;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">case</span> TD_COND_WAIT:</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_wait"</span>]++;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">case</span> TD_COND_SIGNAL:</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_signal"</span>]++;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">case</span> TD_COND_BROADCAST:</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_broadcast"</span>]++;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">case</span> TD_CONDVAR_INI:</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_init"</span>]++;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">case</span> TD_CONDVAR_DESTROY:</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  tdAPIStatMap[<span class="stringliteral">"pthread_cond_destroy"</span>]++;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">case</span> TD_MUTEX_INI:</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_init"</span>]++;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">case</span> TD_MUTEX_DESTROY:</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  tdAPIStatMap[<span class="stringliteral">"pthread_mutex_destroy"</span>]++;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">case</span> TD_BAR_INIT:</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  tdAPIStatMap[<span class="stringliteral">"pthread_barrier_init"</span>]++;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">case</span> TD_BAR_WAIT:</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  tdAPIStatMap[<span class="stringliteral">"pthread_barrier_wait"</span>]++;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">case</span> HARE_PAR_FOR:</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  tdAPIStatMap[<span class="stringliteral">"hare_parallel_for"</span>]++;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keywordflow">case</span> TD_DUMMY:</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <a class="code" href="namespaceSVF.html#a88fd7387fcf16caf70abe265cdcf90b9">StringRef</a> n(module-><a class="code" href="classSVF_1_1SVFModule.html#aa8bab1ad6cab332fe24066b9cf487344">getModuleIdentifier</a>());</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="namespaceSVF.html#a88fd7387fcf16caf70abe265cdcf90b9">StringRef</a> name = n.split(<span class="charliteral">'/'</span>).second;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  name = name.split(<span class="charliteral">'.'</span>).first;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  std::cout << <span class="stringliteral">"################ (program : "</span> << name.str()</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  << <span class="stringliteral">")###############\n"</span>;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  std::cout.flags(std::ios::left);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordtype">unsigned</span> field_width = 20;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">for</span> (llvm::StringMap<u32_t>::iterator it = tdAPIStatMap.begin(), eit =</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  tdAPIStatMap.end(); it != eit; ++it)</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  std::string apiName = it->first().str();</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="comment">// format out put with width 20 space</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  std::cout << std::setw(field_width) << apiName << <span class="stringliteral">" : "</span> << it->second</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  std::cout << <span class="stringliteral">"#######################################################"</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  << std::endl;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor">#endif </span><span class="comment">/* THREADAPI_CPP_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1SVFModule_html_af38d0f831967d6d8391a4c84e58d6519"><div class="ttname"><a href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">SVF::SVFModule::llvmFunEnd</a></div><div class="ttdeci">llvm_iterator llvmFunEnd()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00143">SVFModule.h:143</a></div></div>
|
|
70
70
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
|
|
72
72
|
<div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
|
|
73
73
|
<div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div></div>
|
|
74
|
-
<div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#
|
|
75
|
-
<div class="ttc" id="classSVF_1_1SVFModule_html_a648542aa5c4b487ad5aa12a39d15e951"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">SVF::SVFModule::llvmFunBegin</a></div><div class="ttdeci">llvm_iterator llvmFunBegin()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#
|
|
76
|
-
<div class="ttc" id="classSVF_1_1SVFModule_html_aa5a0780c5c69a1e9a0ba902b4ad49714"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa5a0780c5c69a1e9a0ba902b4ad49714">SVF::SVFModule::llvm_iterator</a></div><div class="ttdeci">LLVMFunctionSetType::iterator llvm_iterator</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#
|
|
74
|
+
<div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
|
|
75
|
+
<div class="ttc" id="classSVF_1_1SVFModule_html_a648542aa5c4b487ad5aa12a39d15e951"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">SVF::SVFModule::llvmFunBegin</a></div><div class="ttdeci">llvm_iterator llvmFunBegin()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00135">SVFModule.h:135</a></div></div>
|
|
76
|
+
<div class="ttc" id="classSVF_1_1SVFModule_html_aa5a0780c5c69a1e9a0ba902b4ad49714"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa5a0780c5c69a1e9a0ba902b4ad49714">SVF::SVFModule::llvm_iterator</a></div><div class="ttdeci">LLVMFunctionSetType::iterator llvm_iterator</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00053">SVFModule.h:53</a></div></div>
|
|
77
77
|
<div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
|
|
78
78
|
<div class="ttc" id="classSVF_1_1ThreadAPI_html"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html">SVF::ThreadAPI</a></div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00043">ThreadAPI.h:43</a></div></div>
|
|
79
79
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a145abbd2958629718fbca41d25c3124d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVF::SVFUtil::getCallee</a></div><div class="ttdeci">const SVFFunction * getCallee(const CallSite cs)</div><div class="ttdoc">Return callee of a callsite. Return null if this is an indirect call. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00257">SVFUtil.h:257</a></div></div>
|
|
80
80
|
<div class="ttc" id="namespaceSVF_html_a88fd7387fcf16caf70abe265cdcf90b9"><div class="ttname"><a href="namespaceSVF.html#a88fd7387fcf16caf70abe265cdcf90b9">SVF::StringRef</a></div><div class="ttdeci">llvm::StringRef StringRef</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00102">BasicTypes.h:102</a></div></div>
|
|
81
|
-
<div class="ttc" id="classSVF_1_1SVFModule_html_aa8bab1ad6cab332fe24066b9cf487344"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa8bab1ad6cab332fe24066b9cf487344">SVF::SVFModule::getModuleIdentifier</a></div><div class="ttdeci">const std::string & getModuleIdentifier() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#
|
|
81
|
+
<div class="ttc" id="classSVF_1_1SVFModule_html_aa8bab1ad6cab332fe24066b9cf487344"><div class="ttname"><a href="classSVF_1_1SVFModule.html#aa8bab1ad6cab332fe24066b9cf487344">SVF::SVFModule::getModuleIdentifier</a></div><div class="ttdeci">const std::string & getModuleIdentifier() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00204">SVFModule.h:204</a></div></div>
|
|
82
82
|
<div class="ttc" id="ThreadAPI_8h_html"><div class="ttname"><a href="ThreadAPI_8h.html">ThreadAPI.h</a></div></div>
|
|
83
83
|
<div class="ttc" id="ThreadAPI_8cpp_html_aa5c38361a7f02befa83ea45388056ea1"><div class="ttname"><a href="ThreadAPI_8cpp.html#aa5c38361a7f02befa83ea45388056ea1">ei_pairs</a></div><div class="ttdeci">static const ei_pair ei_pairs[]</div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8cpp_source.html#l00059">ThreadAPI.cpp:59</a></div></div>
|
|
84
84
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a202de7ad2bea0311e2f75894c030e7a9"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a202de7ad2bea0311e2f75894c030e7a9">SVF::SVFUtil::getLLVMCallSite</a></div><div class="ttdeci">CallSite getLLVMCallSite(const Instruction *inst)</div><div class="ttdoc">Return LLVM callsite given a instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00219">SVFUtil.h:219</a></div></div>
|
|
@@ -90,7 +90,7 @@ $(function() {
|
|
|
90
90
|
<div class="ttc" id="classSVF_1_1CallSite_html_ab36a6a35eea673d4bdca615efc4336b1"><div class="ttname"><a href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">SVF::CallSite::getInstruction</a></div><div class="ttdeci">CallBase * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00320">BasicTypes.h:320</a></div></div>
|
|
91
91
|
<div class="ttc" id="classSVF_1_1ThreadAPI_html_ac9f3cc080275ce7d76dd2f56fc7c6434"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#ac9f3cc080275ce7d76dd2f56fc7c6434">SVF::ThreadAPI::getJoinedThread</a></div><div class="ttdeci">const Value * getJoinedThread(const Instruction *inst) const</div><div class="ttdoc">Return arguments/attributes of pthread_join. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00228">ThreadAPI.h:228</a></div></div>
|
|
92
92
|
<div class="ttc" id="classSVF_1_1SVFValue_html_adc15c1f7a77158142156fba7524e89c9"><div class="ttname"><a href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">SVF::SVFValue::getName</a></div><div class="ttdeci">const llvm::StringRef getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00231">SVFBasicTypes.h:231</a></div></div>
|
|
93
|
-
<div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#
|
|
93
|
+
<div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
|
|
94
94
|
<div class="ttc" id="classSVF_1_1ThreadAPI_html_a9c5ea333cc420bc3b8d8765c664ab128"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a9c5ea333cc420bc3b8d8765c664ab128">SVF::ThreadAPI::ThreadAPI</a></div><div class="ttdeci">ThreadAPI()</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00077">ThreadAPI.h:77</a></div></div>
|
|
95
95
|
<div class="ttc" id="classSVF_1_1ThreadAPI_html_a38a7516702c55ab418167b7c850516b3a4fb99e17bf56ae018448f5f97aa8cda6"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a38a7516702c55ab418167b7c850516b3a4fb99e17bf56ae018448f5f97aa8cda6">SVF::ThreadAPI::TD_BAR_INIT</a></div><div class="ttdoc">initial a mutex variable </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00065">ThreadAPI.h:65</a></div></div>
|
|
96
96
|
<div class="ttc" id="classSVF_1_1ThreadAPI_html_a0ff50b4312b9aa2c7ebd00e9a40a2668"><div class="ttname"><a href="classSVF_1_1ThreadAPI.html#a0ff50b4312b9aa2c7ebd00e9a40a2668">SVF::ThreadAPI::isTDBarWait</a></div><div class="ttdeci">bool isTDBarWait(const Instruction *inst) const</div><div class="ttdoc">Return true if this call waits for a barrier. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadAPI_8h_source.html#l00315">ThreadAPI.h:315</a></div></div>
|