svf-tools 1.0.340 → 1.0.344
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/AndersenSCD_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/BasicTypes_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +7 -7
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +7 -7
- package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FileChecker_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +7 -7
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +15 -15
- package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGNode_8h.html +7 -7
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +69 -69
- package/SVF-doxygen/html/html/ICFGStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +64 -61
- package/SVF-doxygen/html/html/ICFG_8h_source.html +46 -46
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +6 -6
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/MHP_8h_source.html +6 -6
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +9 -9
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +27 -27
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +18 -18
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +12 -12
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Options_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Options_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PCG_8h_source.html +4 -4
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +17 -17
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +17 -17
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +17 -17
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +9 -9
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +32 -32
- package/SVF-doxygen/html/html/SVFG_8h_source.html +27 -27
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +13 -13
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +32 -32
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +20 -20
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +14 -14
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +7 -7
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +16 -15
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +30 -28
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +44 -42
- package/SVF-doxygen/html/html/TCT_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +20 -20
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +2 -2
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +11 -11
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +20 -20
- package/SVF-doxygen/html/html/VFG_8h_source.html +19 -19
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/annotated.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +47 -47
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +38 -38
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +6 -5
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +15 -12
- package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +5 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallCHI-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallCHI.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +158 -0
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +852 -0
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CallMU-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallMU.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +6 -5
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +60 -60
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +52 -52
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +4 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode-members.html +150 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +618 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +4 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode-members.html +149 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +624 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +3 -1
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode-members.html +144 -0
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +413 -0
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +224 -217
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +74 -71
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode-members.html +144 -0
- package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.html +399 -0
- package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +7 -3
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +51 -51
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode-members.html +146 -0
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +494 -0
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +61 -61
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1MHP-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +198 -198
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +70 -47
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +77 -77
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +17 -15
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +141 -106
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PCG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph-members.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +118 -118
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +109 -109
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +5 -3
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode-members.html +153 -0
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +696 -0
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +160 -160
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +76 -76
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +133 -133
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +62 -62
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +17 -16
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1TCT-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph-members.html +40 -40
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +220 -220
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +42 -42
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +96 -96
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +37 -37
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +12 -12
- package/SVF-doxygen/html/html/classes.html +16 -16
- package/SVF-doxygen/html/html/functions_a.html +59 -59
- package/SVF-doxygen/html/html/functions_c.html +74 -71
- package/SVF-doxygen/html/html/functions_eval_c.html +5 -2
- package/SVF-doxygen/html/html/functions_f.html +14 -14
- package/SVF-doxygen/html/html/functions_func.html +56 -56
- package/SVF-doxygen/html/html/functions_func_c.html +28 -28
- package/SVF-doxygen/html/html/functions_func_f.html +6 -6
- package/SVF-doxygen/html/html/functions_func_g.html +88 -88
- package/SVF-doxygen/html/html/functions_func_h.html +17 -17
- package/SVF-doxygen/html/html/functions_func_i.html +31 -29
- package/SVF-doxygen/html/html/functions_func_m.html +1 -1
- package/SVF-doxygen/html/html/functions_func_p.html +1 -1
- package/SVF-doxygen/html/html/functions_func_r.html +6 -6
- package/SVF-doxygen/html/html/functions_func_s.html +1 -1
- package/SVF-doxygen/html/html/functions_func_t.html +7 -7
- package/SVF-doxygen/html/html/functions_func_u.html +3 -3
- package/SVF-doxygen/html/html/functions_g.html +88 -88
- package/SVF-doxygen/html/html/functions_h.html +16 -16
- package/SVF-doxygen/html/html/functions_i.html +37 -35
- package/SVF-doxygen/html/html/functions_m.html +2 -2
- package/SVF-doxygen/html/html/functions_n.html +3 -3
- package/SVF-doxygen/html/html/functions_o.html +10 -10
- package/SVF-doxygen/html/html/functions_p.html +21 -30
- package/SVF-doxygen/html/html/functions_r.html +6 -6
- package/SVF-doxygen/html/html/functions_s.html +15 -14
- package/SVF-doxygen/html/html/functions_t.html +13 -15
- package/SVF-doxygen/html/html/functions_type.html +1 -1
- package/SVF-doxygen/html/html/functions_type_c.html +24 -24
- package/SVF-doxygen/html/html/functions_type_f.html +3 -3
- package/SVF-doxygen/html/html/functions_type_i.html +2 -2
- package/SVF-doxygen/html/html/functions_type_p.html +1 -1
- package/SVF-doxygen/html/html/functions_type_s.html +1 -1
- package/SVF-doxygen/html/html/functions_type_v.html +2 -2
- package/SVF-doxygen/html/html/functions_u.html +3 -3
- package/SVF-doxygen/html/html/functions_v.html +5 -5
- package/SVF-doxygen/html/html/functions_vars_a.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_c.html +11 -11
- package/SVF-doxygen/html/html/functions_vars_f.html +5 -5
- package/SVF-doxygen/html/html/functions_vars_g.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_i.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_p.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_r.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_s.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +5 -9
- package/SVF-doxygen/html/html/hierarchy.html +7 -7
- package/SVF-doxygen/html/html/namespaceSVF.html +11 -11
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +11 -11
- package/SVF-doxygen/html/html/search/all_1.js +58 -58
- package/SVF-doxygen/html/html/search/all_10.js +13 -14
- package/SVF-doxygen/html/html/search/all_12.js +5 -5
- 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 +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +3 -3
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +37 -35
- package/SVF-doxygen/html/html/search/all_6.js +12 -12
- package/SVF-doxygen/html/html/search/all_7.js +62 -61
- package/SVF-doxygen/html/html/search/all_8.js +17 -17
- package/SVF-doxygen/html/html/search/all_9.js +19 -19
- package/SVF-doxygen/html/html/search/all_c.js +1 -1
- package/SVF-doxygen/html/html/search/all_d.js +2 -2
- package/SVF-doxygen/html/html/search/all_e.js +1 -1
- package/SVF-doxygen/html/html/search/all_f.js +2 -2
- package/SVF-doxygen/html/html/search/classes_2.js +1 -1
- package/SVF-doxygen/html/html/search/classes_5.js +2 -2
- package/SVF-doxygen/html/html/search/classes_6.js +1 -1
- package/SVF-doxygen/html/html/search/classes_8.js +2 -2
- package/SVF-doxygen/html/html/search/classes_e.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_2.js +2 -1
- package/SVF-doxygen/html/html/search/functions_0.js +55 -55
- package/SVF-doxygen/html/html/search/functions_10.js +2 -2
- package/SVF-doxygen/html/html/search/functions_11.js +4 -4
- package/SVF-doxygen/html/html/search/functions_12.js +1 -1
- package/SVF-doxygen/html/html/search/functions_2.js +10 -10
- package/SVF-doxygen/html/html/search/functions_5.js +4 -4
- package/SVF-doxygen/html/html/search/functions_6.js +61 -61
- package/SVF-doxygen/html/html/search/functions_7.js +17 -17
- package/SVF-doxygen/html/html/search/functions_8.js +16 -16
- package/SVF-doxygen/html/html/search/functions_b.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +2 -2
- package/SVF-doxygen/html/html/search/functions_f.js +4 -4
- package/SVF-doxygen/html/html/search/typedefs_0.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_14.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_2.js +21 -21
- package/SVF-doxygen/html/html/search/typedefs_5.js +3 -3
- package/SVF-doxygen/html/html/search/typedefs_8.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_f.js +1 -1
- package/SVF-doxygen/html/html/search/variables_1.js +2 -2
- package/SVF-doxygen/html/html/search/variables_10.js +0 -1
- package/SVF-doxygen/html/html/search/variables_12.js +1 -1
- package/SVF-doxygen/html/html/search/variables_13.js +1 -0
- package/SVF-doxygen/html/html/search/variables_14.js +1 -1
- package/SVF-doxygen/html/html/search/variables_3.js +4 -4
- package/SVF-doxygen/html/html/search/variables_6.js +5 -5
- package/SVF-doxygen/html/html/search/variables_7.js +1 -1
- package/SVF-doxygen/html/html/search/variables_9.js +1 -1
- 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_01ICFG_01_5_01_4.html +23 -23
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
- package/include/DDA/ContextDDA.h +3 -3
- package/include/DDA/DDAClient.h +2 -2
- package/include/DDA/DDAVFSolver.h +2 -2
- package/include/DDA/FlowDDA.h +2 -2
- package/include/Graphs/ICFG.h +32 -32
- package/include/Graphs/ICFGNode.h +33 -33
- package/include/Graphs/ICFGStat.h +11 -11
- package/include/Graphs/PTACallGraph.h +19 -19
- package/include/Graphs/SVFG.h +16 -16
- package/include/Graphs/SVFGNode.h +14 -14
- package/include/Graphs/SVFGOPT.h +1 -1
- package/include/Graphs/ThreadCallGraph.h +25 -25
- package/include/Graphs/VFG.h +10 -10
- package/include/Graphs/VFGNode.h +8 -8
- package/include/MSSA/MSSAMuChi.h +6 -6
- package/include/MSSA/MemRegion.h +24 -24
- package/include/MSSA/MemSSA.h +10 -10
- package/include/MTA/LockResultValidator.h +2 -2
- package/include/MTA/MHP.h +4 -4
- package/include/MTA/PCG.h +1 -1
- package/include/MTA/TCT.h +2 -2
- package/include/MemoryModel/PointerAnalysis.h +12 -12
- package/include/MemoryModel/SVFIR.h +22 -22
- package/include/MemoryModel/SVFStatements.h +11 -11
- package/include/MemoryModel/SymbolTableInfo.h +15 -9
- package/include/SABER/LeakChecker.h +4 -4
- package/include/SABER/ProgSlice.h +2 -2
- package/include/SABER/SaberCheckerAPI.h +4 -4
- package/include/SABER/SaberSVFGBuilder.h +1 -1
- package/include/SABER/SrcSnkDDA.h +1 -1
- package/include/SVF-FE/ICFGBuilder.h +4 -4
- package/include/SVF-FE/SVFIRBuilder.h +5 -5
- package/include/Util/Options.h +1 -1
- package/lib/DDA/ContextDDA.cpp +3 -3
- package/lib/DDA/DDAClient.cpp +1 -1
- package/lib/DDA/FlowDDA.cpp +1 -1
- package/lib/Graphs/ICFG.cpp +88 -71
- package/lib/Graphs/PTACallGraph.cpp +5 -5
- package/lib/Graphs/SVFG.cpp +7 -7
- package/lib/Graphs/ThreadCallGraph.cpp +6 -6
- package/lib/Graphs/VFG.cpp +6 -6
- package/lib/MSSA/MemRegion.cpp +17 -17
- package/lib/MSSA/MemSSA.cpp +3 -3
- package/lib/MTA/LockAnalysis.cpp +4 -4
- package/lib/MTA/MHP.cpp +5 -5
- package/lib/MTA/MTAResultValidator.cpp +1 -1
- package/lib/MTA/PCG.cpp +1 -1
- package/lib/MemoryModel/PointerAnalysis.cpp +10 -10
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
- package/lib/MemoryModel/SVFIR.cpp +5 -5
- package/lib/MemoryModel/SVFStatements.cpp +53 -49
- package/lib/MemoryModel/SVFVariables.cpp +10 -10
- package/lib/MemoryModel/SymbolTableInfo.cpp +12 -7
- package/lib/SABER/DoubleFreeChecker.cpp +1 -1
- package/lib/SABER/FileChecker.cpp +2 -2
- package/lib/SABER/LeakChecker.cpp +8 -8
- package/lib/SABER/ProgSlice.cpp +2 -2
- package/lib/SVF-FE/CallGraphBuilder.cpp +4 -4
- package/lib/SVF-FE/Graph2Json.cpp +5 -5
- package/lib/SVF-FE/ICFGBuilder.cpp +31 -25
- package/lib/SVF-FE/SVFIRBuilder.cpp +8 -8
- package/lib/SVF-FE/SymbolTableBuilder.cpp +2 -2
- package/lib/Util/Options.cpp +3 -3
- package/lib/Util/PTAStat.cpp +3 -3
- package/lib/Util/SVFUtil.cpp +2 -0
- package/lib/Util/TypeBasedHeapCloning.cpp +1 -1
- package/lib/WPA/Andersen.cpp +3 -3
- package/lib/WPA/FlowSensitive.cpp +2 -2
- package/lib/WPA/TypeAnalysis.cpp +1 -1
- package/lib/WPA/VersionedFlowSensitive.cpp +4 -4
- package/lib/WPA/WPAPass.cpp +4 -4
- package/package.json +1 -1
|
@@ -66,11 +66,10 @@ $(function() {
|
|
|
66
66
|
<div class="title">MHP.h</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="MHP_8h.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">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * MHP.h</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Created on: Jan 21, 2014</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Author: Yulei Sui, Peng Di</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="preprocessor">#ifndef MHP_H_</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#define MHP_H_</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "<a class="code" href="TCT_8h.html">MTA/TCT.h</a>"</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">class </span>ForkJoinAnalysis;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">class </span>LockAnalysis;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html"> 23</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1MHP.html">MHP</a></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a0cacd62ca23e5f025dba503b0537c15a"> 27</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Function*></a> <a class="code" href="classSVF_1_1MHP.html#a0cacd62ca23e5f025dba503b0537c15a">FunSet</a>;</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aa17ec09b08f8dc7927aa7fa00232dd2f"> 28</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Instruction*></a> <a class="code" href="classSVF_1_1MHP.html#aa17ec09b08f8dc7927aa7fa00232dd2f">InstSet</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a8fecc443c4d92a36a9c50ec6a4f5dea8"> 29</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1TCT.html#a13d01a1747d8ee1521596aeb36bdb655">TCT::InstVec</a> <a class="code" href="classSVF_1_1MHP.html#a8fecc443c4d92a36a9c50ec6a4f5dea8">InstVec</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aeba1145d32693ae7b642f483eeae94ef"> 30</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<CxtThreadStmt></a> <a class="code" href="classSVF_1_1MHP.html#aeba1145d32693ae7b642f483eeae94ef">CxtThreadStmtWorkList</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a28031502c4f8f0d4012c0827c57efb32"> 31</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<CxtThreadStmt></a> <a class="code" href="classSVF_1_1MHP.html#a28031502c4f8f0d4012c0827c57efb32">CxtThreadStmtSet</a>;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ac30f283cb2ad020a054ee6525ca94025"> 32</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<CxtThreadStmt,NodeBS></a> <a class="code" href="classSVF_1_1MHP.html#ac30f283cb2ad020a054ee6525ca94025">ThreadStmtToThreadInterleav</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ae3e240893d0950354d3d775e87d4adf9"> 33</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const Instruction*,CxtThreadStmtSet></a> <a class="code" href="classSVF_1_1MHP.html#ae3e240893d0950354d3d775e87d4adf9">InstToThreadStmtSetMap</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a08ba219ec02b07b1bbd91a88ebb4acd7"> 35</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<CxtStmt></a> <a class="code" href="classSVF_1_1MHP.html#a08ba219ec02b07b1bbd91a88ebb4acd7">LockSpan</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a570f93674511a93cdf2afb96df4947b6"> 37</a></span>  <span class="keyword">typedef</span> std::pair<const Function*,const Function*> <a class="code" href="classSVF_1_1MHP.html#a570f93674511a93cdf2afb96df4947b6">FuncPair</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#adff2785f9d46eb110ce5b429592b2a38"> 38</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<FuncPair, bool></a> <a class="code" href="classSVF_1_1MHP.html#adff2785f9d46eb110ce5b429592b2a38">FuncPairToBool</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <a class="code" href="classSVF_1_1MHP.html#abf1f5a7c365dfb95b42015b7b2ad6fbe">MHP</a>(<a class="code" href="classSVF_1_1TCT.html">TCT</a>* t);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1MHP.html#a6b7133f1767c3636ce253c5325be5053">~MHP</a>();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a02457fa6e3c85c897ec3b3d8db18cc4b">analyze</a>();</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#adfd90a8d20d630bc3813f5ed71d3abf7">analyzeInterleaving</a>();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a20e740d4b96ef086b6b5778acd38ca88"> 53</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1MHP.html#a20e740d4b96ef086b6b5778acd38ca88">getThreadCallGraph</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>;</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> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a033936547612c54326a604f0ff1e39a6"> 59</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1MHP.html#a033936547612c54326a604f0ff1e39a6">getTCT</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="comment">// Get CallBlockNode</span></div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab956b55910ed74c4c81df622d38d746b"> 65</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* <a class="code" href="classSVF_1_1MHP.html#ab956b55910ed74c4c81df622d38d746b">getCBN</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst) {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a60a74209bd04b2c42fadee5c31e527d3">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a1cfec64cc65abcbc5ba32695850bfb48">isConnectedfromMain</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">// /// Interface to query whether two instructions are protected by common locks</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// virtual bool isProtectedByACommonLock(const Instruction* i1, const Instruction* i2);</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// virtual bool isAllCxtInSameLockSpan(const Instruction *I1, const Instruction *I2);</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// virtual bool isOneCxtInSameLockSpan(const Instruction *I1, const Instruction *I2);</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">//</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">// bool hasOneCxtInLockSpan(const Instruction *I, LockSpan lspan);</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// bool hasAllCxtInLockSpan(const Instruction *I, LockSpan lspan);</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">//</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">//</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">// LockSpan getSpanfromCxtLock(NodeID l);</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a9989f2d200cec6c387d63f452b8eac6b">mayHappenInParallel</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a9a4b6d5c57552b61a62a4dd180aef40c">mayHappenInParallelCache</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a2faaa02abec3b8f8fca73e178cbdcb41">mayHappenInParallelInst</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aab80f1bc5c359a7d3b03f249bafa1d40">executedByTheSameThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a653460ed316804bea377eecdde412d36"> 90</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1MHP.html#a653460ed316804bea377eecdde412d36">getInterleavingThreads</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[cts];</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a3ba43bb0be55ffade3d70f8cbb95f88f"> 94</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a3ba43bb0be55ffade3d70f8cbb95f88f">hasInterleavingThreads</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts)<span class="keyword"> const</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>.find(cts)!=<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>.end();</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a49504524c0d3e53c769cdbfd9ec1ccb0"> 102</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> CxtThreadStmtSet& <a class="code" href="classSVF_1_1MHP.html#a49504524c0d3e53c769cdbfd9ec1ccb0">getThreadStmtSet</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="l00103"></a><span class="lineno"> 103</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  InstToThreadStmtSetMap::const_iterator it = <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.find(inst);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=<a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.end() && <span class="stringliteral">"no thread access the instruction?"</span>);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a6841b147e2a681ea372bdddd53616294"> 108</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a6841b147e2a681ea372bdddd53616294">hasThreadStmtSet</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="l00109"></a><span class="lineno"> 109</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.find(inst)!=<a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.end();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a22f7dc5043fed97f1b4b273b8b710415">printInterleaving</a>();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  </div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a71183ff98500d1ce49170bab61fe664e"> 119</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>& <a class="code" href="classSVF_1_1MHP.html#a71183ff98500d1ce49170bab61fe664e">getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>& callees) {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-><a class="code" href="classSVF_1_1PTACallGraph.html#a486f79252c216eb5a9f4c09261a24ae2">getCallees</a>(<a class="code" href="classSVF_1_1MHP.html#ab956b55910ed74c4c81df622d38d746b">getCBN</a>(inst), callees);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">return</span> callees;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#abeb76ad63d9362ba8fa8f7088b0d942b">updateNonCandidateFunInterleaving</a>();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a2c1e4fac7b810021939ed26307d37816">handleNonCandidateFun</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a8a95f8ae419b66310ce6f572caea2ca5">handleFork</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a3a535274cd3349a05eeccf3c9231396a">handleJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af769afe6ba6baccda5a497df181c9fb0">handleCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a76ac9d388529f090ab6dad5829dd0753">handleRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af4d6f0884ce18ea5caf0dfd9799d1aae">handleIntra</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6990ff8e3efe5af365c8205b7ced38ed">validateResults</a>();</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a6343dd11dd75d3730dc463321a11445e"> 150</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6343dd11dd75d3730dc463321a11445e">addInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& tgr, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr].test_and_set(tid))</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>  <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>[tgr.<a class="code" href="classSVF_1_1CxtStmt.html#a5e8c4b10eb5c3240d2e21a020ed834a6">getStmt</a>()].insert(tgr);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  }</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a6c77349f168735888d0db4ac5b632da9"> 158</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6c77349f168735888d0db4ac5b632da9">addInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& tgr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& src)</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>  <span class="keywordtype">bool</span> changed = <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr] |= <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[src];</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">if</span>(changed)</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>  <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>[tgr.<a class="code" href="classSVF_1_1CxtStmt.html#a5e8c4b10eb5c3240d2e21a020ed834a6">getStmt</a>()].insert(tgr);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a5546cb50ca769218a871cdda08a25d18"> 167</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a5546cb50ca769218a871cdda08a25d18">rmInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& tgr, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& tids, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinsite)</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>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> joinedTids;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = tids.begin(), eit = tids.end(); it!=eit; ++it)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#acd5b010c22a6590f6ea1a5cedd8f43ba">isMustJoin</a>(tgr.<a class="code" href="classSVF_1_1CxtThreadStmt.html#a3b8f641f2fb7ade7052cae1ee6463884">getTid</a>(),joinsite))</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  joinedTids.set(*it);</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>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr].intersectWithComplement(joinedTids))</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>  <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</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>  }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#ae9423c868ba4d26337428b96db9fc77b">updateAncestorThreads</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a23ab5a03b7c00ba0ebac65568a83a5cc">updateSiblingThreads</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a0356a8ccc53999549fb369f67faad306">isRecurFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> parentTid, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#acd5b010c22a6590f6ea1a5cedd8f43ba">isMustJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinsite);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a041392f704690e89d8acf5ec68d8682c"> 195</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a041392f704690e89d8acf5ec68d8682c">isMultiForkedThread</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(curTid)-><a class="code" href="classSVF_1_1TCTNode.html#a5dd0cf88e381438d191b275314117561">isMultiforked</a>();</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a04357a2827d22e4e727d488d32eb5cb5"> 201</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a04357a2827d22e4e727d488d32eb5cb5">getNextInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, InstVec& instVec)</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>  <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a97c3081d0648a8d483b07f23bbd1b6bf">getNextInsts</a>(inst,instVec);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a67e2d43f0e35cc46eb7680ec66a4fe44"> 206</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a67e2d43f0e35cc46eb7680ec66a4fe44">pushCxt</a>(<a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</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>  <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#afc6d7a91cfc98561bcce13425964a39e">pushCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#afee99dd3ca2ff68789864423fc9358e0"> 211</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#afee99dd3ca2ff68789864423fc9358e0">matchCxt</a>(<a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a9b6dda84d37afadaf80bc2e26986a52e">matchCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178"> 218</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cs)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(cs);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ad8d3aa1a12fb1e8668eb4138fbe23b7d"> 222</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a> <a class="code" href="classSVF_1_1MHP.html#ad8d3aa1a12fb1e8668eb4138fbe23b7d">popFromCTSWorkList</a>()</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>  <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a> ctp = <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">return</span> ctp;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  }</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div><div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aeabf2e9ec8b1ec874503c83cc65e1205"> 229</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aeabf2e9ec8b1ec874503c83cc65e1205">isTDFork</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-><a class="code" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10">getThreadAPI</a>()-><a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(call);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab566508ffd73abd4d5ad047a1d7f9c27"> 234</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#ab566508ffd73abd4d5ad047a1d7f9c27">isTDJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-><a class="code" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10">getThreadAPI</a>()-><a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(call);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MHP.html#a9b89800fe8089fd7521ef3f415f6eb12">getDirAndIndJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1MHP.html#afa0d341a2fb7b05522dc6e178eab7e8b">isJoinInSymmetricLoop</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call) <span class="keyword">const</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a6f07427b45991b2d8a3ff21582121d23">isHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799"> 248</a></span>  <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>; </div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176"> 249</a></span>  <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>; </div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a98857a1837cef5519c938d07bb771a60"> 250</a></span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html">ForkJoinAnalysis</a>* <a class="code" href="classSVF_1_1MHP.html#a98857a1837cef5519c938d07bb771a60">fja</a>; </div><div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb"> 251</a></span>  CxtThreadStmtWorkList <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>; </div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541"> 252</a></span>  ThreadStmtToThreadInterleav <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>; </div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f"> 253</a></span>  InstToThreadStmtSetMap <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>; </div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a1f057ef082484a1997cb02287e063f00"> 254</a></span>  FuncPairToBool <a class="code" href="classSVF_1_1MHP.html#a1f057ef082484a1997cb02287e063f00">nonCandidateFuncMHPRelMap</a>;</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> </div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a26ae18993915d76b704232cded9811c2"> 258</a></span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MHP.html#a26ae18993915d76b704232cded9811c2">numOfTotalQueries</a>; </div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab8bd382e0c70b0feb2a291ecc4043106"> 259</a></span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MHP.html#ab8bd382e0c70b0feb2a291ecc4043106">numOfMHPQueries</a>; </div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aca306b97c6dcd47a8f407038436473a2"> 260</a></span>  <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MHP.html#aca306b97c6dcd47a8f407038436473a2">interleavingTime</a>;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab7d9fe837844197b7acdc0493a50aaa5"> 261</a></span>  <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MHP.html#ab7d9fe837844197b7acdc0493a50aaa5">interleavingQueriesTime</a>;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</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> </div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html"> 269</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1ForkJoinAnalysis.html">ForkJoinAnalysis</a></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> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00274"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631"> 274</a></span>  <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  {</div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a9d940442c782d5a1297102209540182f"> 276</a></span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a9d940442c782d5a1297102209540182f">Empty</a>, <span class="comment">// initial(dummy) state</span></div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a"> 277</a></span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>, <span class="comment">// thread is alive</span></div><div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4"> 278</a></span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4">TDDead</a>, <span class="comment">// thread is dead</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  };</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f"> 281</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1TCT.html#a13d01a1747d8ee1521596aeb36bdb655">TCT::InstVec</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>;</div><div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acdc652faba35e45820cce0cdd20ea99c"> 282</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<CxtStmt,ValDomain></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acdc652faba35e45820cce0cdd20ea99c">CxtStmtToAliveFlagMap</a>;</div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a9b0d25255df73a5d7a0b9d30fe918200"> 283</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<CxtStmt,NodeBS></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a9b0d25255df73a5d7a0b9d30fe918200">CxtStmtToTIDMap</a>;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7fb8df483e619337e77088e8543a9846"> 284</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<NodePair></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7fb8df483e619337e77088e8543a9846">ThreadPairSet</a>;</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7a048ea1d9e80d4c122c1bbcacdea5f3"> 285</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<CxtStmt, const Loop*></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7a048ea1d9e80d4c122c1bbcacdea5f3">CxtStmtToLoopMap</a>;</div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a0ec0920d324604e3672db4d8dff93b1e"> 286</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<CxtStmt></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a0ec0920d324604e3672db4d8dff93b1e">CxtStmtWorkList</a>;</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acd98a293bb20064cf5d0bb71c619fc54"> 287</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const Instruction*, PTASCEV></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acd98a293bb20064cf5d0bb71c619fc54">forkjoinToPTASCEVMap</a>;</div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a431ec90a12a62bb892e8b78f66a8f9dc"> 288</a></span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a431ec90a12a62bb892e8b78f66a8f9dc">ForkJoinAnalysis</a>(<a class="code" href="classSVF_1_1TCT.html">TCT</a>* t) : <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>(t)</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  collectSCEVInfo();</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordtype">void</span> collectSCEVInfo();</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordtype">void</span> analyzeForkJoinPair();</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a819ef18524ee9104b920d1a465c61da1"> 301</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a819ef18524ee9104b920d1a465c61da1">getDirectlyJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">return</span> directJoinMap[cs];</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MHP.html#a9b89800fe8089fd7521ef3f415f6eb12">getDirAndIndJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4e058b920c3648f943f85099690ff44f"> 309</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4e058b920c3648f943f85099690ff44f">isJoinInSymmetricLoop</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs)<span class="keyword"> const</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  CxtStmtToLoopMap::const_iterator it = cxtJoinInLoop.find(cs);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">if</span>(it!=cxtJoinInLoop.end())</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a86c68ce5fd8825b1593d92a5a5bad389"> 317</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a86c68ce5fd8825b1593d92a5a5bad389">isHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordtype">bool</span> nonhp = HBPair.find(std::make_pair(tid1,tid2))!=HBPair.end();</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordtype">bool</span> hp = HPPair.find(std::make_pair(tid1,tid2))!=HPPair.end();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">if</span>(nonhp && !hp)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  }</div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab55532eefbcef639ced957ad82fbd340"> 326</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab55532eefbcef639ced957ad82fbd340">isFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</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>  <span class="keywordtype">bool</span> full = fullJoin.find(std::make_pair(tid1,tid2))!=fullJoin.end();</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordtype">bool</span> partial = partialJoin.find(std::make_pair(tid1,tid2))!=partialJoin.end();</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">if</span>(full && !partial)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acc178bd423dbb21bd46a9fae9ed0351c"> 336</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acc178bd423dbb21bd46a9fae9ed0351c">getExitInstOfParentRoutineFun</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)<span class="keyword"> const</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> parentTid = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a516578af1f8666ff672e6611e61d7152">getParentThread</a>(tid);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThread.html">CxtThread</a>& parentct = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(parentTid)-><a class="code" href="classSVF_1_1TCTNode.html#a21591b19f6a9267151c31178f9543ee6">getCxtThread</a>();</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* parentRoutine = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a7ccacac1c673b38215b90e4eb480581f">getStartRoutineOfCxtThread</a>(parentct);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> &(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a3cb226930eeaf558575e09e5b65e0223">SVFUtil::getFunExitBB</a>(parentRoutine)->back());</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div><div class="line"><a name="l00345"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3449439792a54c847c67b3041094db49"> 345</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3449439792a54c847c67b3041094db49">getJoinLoop</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  {</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a52a707bf6f278e810f440c279f5261dc">getJoinLoop</a>(inst);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  }</div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ad3db3e7a2ebe7646675aab16103691e7"> 350</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad8794eb3c00de3d3b5c5e43dded3fb42">ScalarEvolution</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ad3db3e7a2ebe7646675aab16103691e7">getSE</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#ac66b3a193240c17c3f06437442b2d8bf">getSE</a>(inst);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a8a95f8ae419b66310ce6f572caea2ca5">handleFork</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a3a535274cd3349a05eeccf3c9231396a">handleJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af769afe6ba6baccda5a497df181c9fb0">handleCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a76ac9d388529f090ab6dad5829dd0753">handleRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cts);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af4d6f0884ce18ea5caf0dfd9799d1aae">handleIntra</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cts);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordtype">bool</span> isSameSCEV(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordtype">bool</span> sameLoopTripCount(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3655131add43346a175576b023e32509"> 378</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3655131add43346a175576b023e32509">isAliasedForkJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a5b087b42340d1a1b2ee37339637709d3">getPTA</a>()-><a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(getForkedThread(forkSite), getJoinedThread(joinSite)) && isSameSCEV(forkSite,joinSite);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="comment">// Get CallBlockNode</span></div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a6a1ad5d1fa9e6884f3ffc4adf7578b91"> 383</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a6a1ad5d1fa9e6884f3ffc4adf7578b91">getCBN</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst) {</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a60a74209bd04b2c42fadee5c31e527d3">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  }</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> getMarkedFlag(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  CxtStmtToAliveFlagMap::const_iterator it = cxtStmtToAliveFlagMap.find(cs);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">if</span>(it==cxtStmtToAliveFlagMap.end())</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  cxtStmtToAliveFlagMap[cs] = Empty;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordflow">return</span> Empty;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00401"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215"> 401</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& tgr, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag)</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_tgr = getMarkedFlag(tgr);</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  cxtStmtToAliveFlagMap[tgr] = flag;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keywordflow">if</span>(flag_tgr!=getMarkedFlag(tgr))</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a047fbff4be9f94ab12795cd371f60efa"> 409</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a047fbff4be9f94ab12795cd371f60efa">markCxtStmtFlag</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& tgr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& src)</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_tgr = getMarkedFlag(tgr);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_src = getMarkedFlag(src);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">if</span>(flag_tgr == Empty)</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  cxtStmtToAliveFlagMap[tgr] = flag_src;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(flag_tgr == TDDead)</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">if</span>(flag_src==TDAlive)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  cxtStmtToAliveFlagMap[tgr] = TDAlive;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">if</span>(flag_tgr!=getMarkedFlag(tgr))</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  }</div><div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7965a276a3a12d532c9967de13d4cc8a"> 432</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7965a276a3a12d532c9967de13d4cc8a">clearFlagMap</a>()</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  cxtStmtToAliveFlagMap.clear();</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a29d9fec1ea7b8e5456342522eea403ad">clear</a>();</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div><div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7ac37e3399aa6e303a6babe8f455aa87"> 441</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7ac37e3399aa6e303a6babe8f455aa87">pushToCTSWorkList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(cs);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  }</div><div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4d893583db922444c6a29923bf3d05d3"> 445</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4d893583db922444c6a29923bf3d05d3">popFromCTSWorkList</a>()</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> ctp = <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">return</span> ctp;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div><div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a799e14292e16b9fb322cab07f3ff5593"> 453</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a799e14292e16b9fb322cab07f3ff5593">getNextInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, InstVec& instSet)</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  {</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a97c3081d0648a8d483b07f23bbd1b6bf">getNextInsts</a>(inst,instSet);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div><div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aaf70954762aa86f835d799994726790e"> 458</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aaf70954762aa86f835d799994726790e">pushCxt</a>(<a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#afc6d7a91cfc98561bcce13425964a39e">pushCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  }</div><div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aea9ef584ce6c7129bcd1d5ecda2f1f74"> 463</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aea9ef584ce6c7129bcd1d5ecda2f1f74">matchCxt</a>(<a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a9b6dda84d37afadaf80bc2e26986a52e">matchCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  }</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div><div class="line"><a name="l00469"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aff32f240a03421937c2fc606359dca9b"> 469</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aff32f240a03421937c2fc606359dca9b">isTDFork</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">return</span> getTCG()->getThreadAPI()->isTDFork(call);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  }</div><div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aac722a42dc6e03e771a7a80de5f8ec94"> 474</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aac722a42dc6e03e771a7a80de5f8ec94">isTDJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keywordflow">return</span> getTCG()->getThreadAPI()->isTDJoin(call);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  }</div><div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acd4308b99446c277ccb3407103fe21d0"> 479</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acd4308b99446c277ccb3407103fe21d0">getForkedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keywordflow">return</span> getTCG()->getThreadAPI()->getForkedThread(call);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  }</div><div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ada1e56dfe2d64ea6310142a346c86ed4"> 484</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ada1e56dfe2d64ea6310142a346c86ed4">getJoinedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keywordflow">return</span> getTCG()->getThreadAPI()->getJoinedThread(call);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  }</div><div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#afcf119c89e93a24923dd0d97ddec7ee1"> 488</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>& <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#afcf119c89e93a24923dd0d97ddec7ee1">getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>& callees) {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  getTCG()->getCallees(<a class="code" href="classSVF_1_1MHP.html#ab956b55910ed74c4c81df622d38d746b">getCBN</a>(inst), callees);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">return</span> callees;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  }</div><div class="line"><a name="l00493"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6"> 493</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>();</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  }</div><div class="line"><a name="l00498"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe"> 498</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe">addDirectlyJoinTID</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  directJoinMap[cs].set(tid);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div><div class="line"><a name="l00506"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2"> 506</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2">addToHPPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  HPPair.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  HPPair.insert(std::make_pair(tid2,tid1));</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  }</div><div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a647ae6866bb37be850f0bdd5a7341188"> 511</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a647ae6866bb37be850f0bdd5a7341188">addToHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  HBPair.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  }</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div><div class="line"><a name="l00519"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4"> 519</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4">addToFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  fullJoin.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  }</div><div class="line"><a name="l00523"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca"> 523</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca">addToPartial</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  partialJoin.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00530"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab302cceb28998623fed622560e50a740"> 530</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab302cceb28998623fed622560e50a740">addSymmetricLoopJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* lp)</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  cxtJoinInLoop[cs] = lp;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  }</div><div class="line"><a name="l00534"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce"> 534</a></span>  <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>;</div><div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aa31b3f3d51b963ccd475e66b77143dba"> 535</a></span>  CxtStmtToAliveFlagMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aa31b3f3d51b963ccd475e66b77143dba">cxtStmtToAliveFlagMap</a>; </div><div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acccf53d174cac3275da0d79c89a73916"> 536</a></span>  CxtStmtWorkList <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acccf53d174cac3275da0d79c89a73916">cxtStmtList</a>; </div><div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#abf5b499f93a658636d09a62d14a47cad"> 537</a></span>  CxtStmtToTIDMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#abf5b499f93a658636d09a62d14a47cad">directJoinMap</a>; </div><div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be"> 538</a></span>  CxtStmtToTIDMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be">dirAndIndJoinMap</a>; </div><div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a63da48d338683ec95709a6bd95238707"> 539</a></span>  CxtStmtToLoopMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a63da48d338683ec95709a6bd95238707">cxtJoinInLoop</a>; </div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aad3e722ecaa4a39aef0e1cabfa2b8019"> 540</a></span>  ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aad3e722ecaa4a39aef0e1cabfa2b8019">HBPair</a>; </div><div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4ad5c7a21ca994d908d648ca9d9e1833"> 541</a></span>  ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4ad5c7a21ca994d908d648ca9d9e1833">HPPair</a>; </div><div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4193a30050195cd9aaafd58511b66ccc"> 542</a></span>  ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4193a30050195cd9aaafd58511b66ccc">fullJoin</a>; </div><div class="line"><a name="l00543"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3616d6e1649f9e451da0f7a44cffc1e3"> 543</a></span>  ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3616d6e1649f9e451da0f7a44cffc1e3">partialJoin</a>; </div><div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a1c616b61fbe9c713f51f2a44c4208cfa"> 544</a></span>  <a class="code" href="classSVF_1_1PTACFInfoBuilder.html">PTACFInfoBuilder</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1c616b61fbe9c713f51f2a44c4208cfa">ptaCFInfo</a>; </div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4207948054a0f98560922f3f07ada10f"> 545</a></span>  forkjoinToPTASCEVMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4207948054a0f98560922f3f07ada10f">fkjnToPTASCEVMap</a>; <span class="comment">//< map a pointer at a fork/join site to its corresponing scev expression</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> };</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor">#endif </span><span class="comment">/* MHP_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1TCT_html_a7ccacac1c673b38215b90e4eb480581f"><div class="ttname"><a href="classSVF_1_1TCT.html#a7ccacac1c673b38215b90e4eb480581f">SVF::TCT::getStartRoutineOfCxtThread</a></div><div class="ttdeci">const Function * getStartRoutineOfCxtThread(const CxtThread &ct) const</div><div class="ttdoc">get the start routine function of a thread </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00334">TCT.h:334</a></div></div>
|
|
69
|
+
<a href="MHP_8h.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">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * MHP.h</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Created on: Jan 21, 2014</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Author: Yulei Sui, Peng Di</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="preprocessor">#ifndef MHP_H_</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#define MHP_H_</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "<a class="code" href="TCT_8h.html">MTA/TCT.h</a>"</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">class </span>ForkJoinAnalysis;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">class </span>LockAnalysis;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html"> 23</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1MHP.html">MHP</a></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> {</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a0cacd62ca23e5f025dba503b0537c15a"> 27</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Function*></a> <a class="code" href="classSVF_1_1MHP.html#a0cacd62ca23e5f025dba503b0537c15a">FunSet</a>;</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aa17ec09b08f8dc7927aa7fa00232dd2f"> 28</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Instruction*></a> <a class="code" href="classSVF_1_1MHP.html#aa17ec09b08f8dc7927aa7fa00232dd2f">InstSet</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a8fecc443c4d92a36a9c50ec6a4f5dea8"> 29</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1TCT.html#a13d01a1747d8ee1521596aeb36bdb655">TCT::InstVec</a> <a class="code" href="classSVF_1_1MHP.html#a8fecc443c4d92a36a9c50ec6a4f5dea8">InstVec</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aeba1145d32693ae7b642f483eeae94ef"> 30</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<CxtThreadStmt></a> <a class="code" href="classSVF_1_1MHP.html#aeba1145d32693ae7b642f483eeae94ef">CxtThreadStmtWorkList</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a28031502c4f8f0d4012c0827c57efb32"> 31</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<CxtThreadStmt></a> <a class="code" href="classSVF_1_1MHP.html#a28031502c4f8f0d4012c0827c57efb32">CxtThreadStmtSet</a>;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ac30f283cb2ad020a054ee6525ca94025"> 32</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<CxtThreadStmt,NodeBS></a> <a class="code" href="classSVF_1_1MHP.html#ac30f283cb2ad020a054ee6525ca94025">ThreadStmtToThreadInterleav</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ae3e240893d0950354d3d775e87d4adf9"> 33</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const Instruction*,CxtThreadStmtSet></a> <a class="code" href="classSVF_1_1MHP.html#ae3e240893d0950354d3d775e87d4adf9">InstToThreadStmtSetMap</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a08ba219ec02b07b1bbd91a88ebb4acd7"> 35</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<CxtStmt></a> <a class="code" href="classSVF_1_1MHP.html#a08ba219ec02b07b1bbd91a88ebb4acd7">LockSpan</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a570f93674511a93cdf2afb96df4947b6"> 37</a></span>  <span class="keyword">typedef</span> std::pair<const Function*,const Function*> <a class="code" href="classSVF_1_1MHP.html#a570f93674511a93cdf2afb96df4947b6">FuncPair</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#adff2785f9d46eb110ce5b429592b2a38"> 38</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<FuncPair, bool></a> <a class="code" href="classSVF_1_1MHP.html#adff2785f9d46eb110ce5b429592b2a38">FuncPairToBool</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <a class="code" href="classSVF_1_1MHP.html#abf1f5a7c365dfb95b42015b7b2ad6fbe">MHP</a>(<a class="code" href="classSVF_1_1TCT.html">TCT</a>* t);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1MHP.html#a6b7133f1767c3636ce253c5325be5053">~MHP</a>();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a02457fa6e3c85c897ec3b3d8db18cc4b">analyze</a>();</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#adfd90a8d20d630bc3813f5ed71d3abf7">analyzeInterleaving</a>();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a20e740d4b96ef086b6b5778acd38ca88"> 53</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1MHP.html#a20e740d4b96ef086b6b5778acd38ca88">getThreadCallGraph</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>;</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> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a033936547612c54326a604f0ff1e39a6"> 59</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1MHP.html#a033936547612c54326a604f0ff1e39a6">getTCT</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="comment">// Get CallICFGNode</span></div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55"> 65</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* <a class="code" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55">getCBN</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst) {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#afea9de8f27e501fdc2723cc14a8dc93f">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a1cfec64cc65abcbc5ba32695850bfb48">isConnectedfromMain</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">// /// Interface to query whether two instructions are protected by common locks</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">// virtual bool isProtectedByACommonLock(const Instruction* i1, const Instruction* i2);</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// virtual bool isAllCxtInSameLockSpan(const Instruction *I1, const Instruction *I2);</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// virtual bool isOneCxtInSameLockSpan(const Instruction *I1, const Instruction *I2);</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">//</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">// bool hasOneCxtInLockSpan(const Instruction *I, LockSpan lspan);</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">// bool hasAllCxtInLockSpan(const Instruction *I, LockSpan lspan);</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">//</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">//</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">// LockSpan getSpanfromCxtLock(NodeID l);</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a9989f2d200cec6c387d63f452b8eac6b">mayHappenInParallel</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a9a4b6d5c57552b61a62a4dd180aef40c">mayHappenInParallelCache</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a2faaa02abec3b8f8fca73e178cbdcb41">mayHappenInParallelInst</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aab80f1bc5c359a7d3b03f249bafa1d40">executedByTheSameThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* i2);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a653460ed316804bea377eecdde412d36"> 90</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1MHP.html#a653460ed316804bea377eecdde412d36">getInterleavingThreads</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[cts];</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a3ba43bb0be55ffade3d70f8cbb95f88f"> 94</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a3ba43bb0be55ffade3d70f8cbb95f88f">hasInterleavingThreads</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts)<span class="keyword"> const</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>.find(cts)!=<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>.end();</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a49504524c0d3e53c769cdbfd9ec1ccb0"> 102</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> CxtThreadStmtSet& <a class="code" href="classSVF_1_1MHP.html#a49504524c0d3e53c769cdbfd9ec1ccb0">getThreadStmtSet</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="l00103"></a><span class="lineno"> 103</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  InstToThreadStmtSetMap::const_iterator it = <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.find(inst);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=<a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.end() && <span class="stringliteral">"no thread access the instruction?"</span>);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a6841b147e2a681ea372bdddd53616294"> 108</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a6841b147e2a681ea372bdddd53616294">hasThreadStmtSet</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="l00109"></a><span class="lineno"> 109</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.find(inst)!=<a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>.end();</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a22f7dc5043fed97f1b4b273b8b710415">printInterleaving</a>();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  </div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a71183ff98500d1ce49170bab61fe664e"> 119</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>& <a class="code" href="classSVF_1_1MHP.html#a71183ff98500d1ce49170bab61fe664e">getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>& callees) {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-><a class="code" href="classSVF_1_1PTACallGraph.html#a317e09edb29b110cf4273009551d31ec">getCallees</a>(<a class="code" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55">getCBN</a>(inst), callees);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">return</span> callees;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#abeb76ad63d9362ba8fa8f7088b0d942b">updateNonCandidateFunInterleaving</a>();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a2c1e4fac7b810021939ed26307d37816">handleNonCandidateFun</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a8a95f8ae419b66310ce6f572caea2ca5">handleFork</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a3a535274cd3349a05eeccf3c9231396a">handleJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af769afe6ba6baccda5a497df181c9fb0">handleCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a76ac9d388529f090ab6dad5829dd0753">handleRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af4d6f0884ce18ea5caf0dfd9799d1aae">handleIntra</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cts);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6990ff8e3efe5af365c8205b7ced38ed">validateResults</a>();</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a6343dd11dd75d3730dc463321a11445e"> 150</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6343dd11dd75d3730dc463321a11445e">addInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& tgr, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr].test_and_set(tid))</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>  <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>[tgr.<a class="code" href="classSVF_1_1CxtStmt.html#a5e8c4b10eb5c3240d2e21a020ed834a6">getStmt</a>()].insert(tgr);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  }</div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a6c77349f168735888d0db4ac5b632da9"> 158</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a6c77349f168735888d0db4ac5b632da9">addInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& tgr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& src)</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>  <span class="keywordtype">bool</span> changed = <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr] |= <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[src];</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">if</span>(changed)</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>  <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>[tgr.<a class="code" href="classSVF_1_1CxtStmt.html#a5e8c4b10eb5c3240d2e21a020ed834a6">getStmt</a>()].insert(tgr);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a5546cb50ca769218a871cdda08a25d18"> 167</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a5546cb50ca769218a871cdda08a25d18">rmInterleavingThread</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& tgr, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& tids, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinsite)</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>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> joinedTids;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = tids.begin(), eit = tids.end(); it!=eit; ++it)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#acd5b010c22a6590f6ea1a5cedd8f43ba">isMustJoin</a>(tgr.<a class="code" href="classSVF_1_1CxtThreadStmt.html#a3b8f641f2fb7ade7052cae1ee6463884">getTid</a>(),joinsite))</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  joinedTids.set(*it);</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>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>[tgr].intersectWithComplement(joinedTids))</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>  <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</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>  }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#ae9423c868ba4d26337428b96db9fc77b">updateAncestorThreads</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a23ab5a03b7c00ba0ebac65568a83a5cc">updateSiblingThreads</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a0356a8ccc53999549fb369f67faad306">isRecurFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> parentTid, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#acd5b010c22a6590f6ea1a5cedd8f43ba">isMustJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinsite);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a041392f704690e89d8acf5ec68d8682c"> 195</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a041392f704690e89d8acf5ec68d8682c">isMultiForkedThread</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> curTid)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(curTid)-><a class="code" href="classSVF_1_1TCTNode.html#a5dd0cf88e381438d191b275314117561">isMultiforked</a>();</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a04357a2827d22e4e727d488d32eb5cb5"> 201</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a04357a2827d22e4e727d488d32eb5cb5">getNextInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, InstVec& instVec)</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>  <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a97c3081d0648a8d483b07f23bbd1b6bf">getNextInsts</a>(inst,instVec);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a67e2d43f0e35cc46eb7680ec66a4fe44"> 206</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a67e2d43f0e35cc46eb7680ec66a4fe44">pushCxt</a>(<a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</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>  <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#afc6d7a91cfc98561bcce13425964a39e">pushCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#afee99dd3ca2ff68789864423fc9358e0"> 211</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#afee99dd3ca2ff68789864423fc9358e0">matchCxt</a>(<a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a9b6dda84d37afadaf80bc2e26986a52e">matchCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178"> 218</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a>& cs)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(cs);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ad8d3aa1a12fb1e8668eb4138fbe23b7d"> 222</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a> <a class="code" href="classSVF_1_1MHP.html#ad8d3aa1a12fb1e8668eb4138fbe23b7d">popFromCTSWorkList</a>()</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>  <a class="code" href="classSVF_1_1CxtThreadStmt.html">CxtThreadStmt</a> ctp = <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">return</span> ctp;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  }</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div><div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aeabf2e9ec8b1ec874503c83cc65e1205"> 229</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#aeabf2e9ec8b1ec874503c83cc65e1205">isTDFork</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-><a class="code" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10">getThreadAPI</a>()-><a class="code" href="classSVF_1_1ThreadAPI.html#a9da276dca5092d18f4f22d32e5ab6cdf">isTDFork</a>(call);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab566508ffd73abd4d5ad047a1d7f9c27"> 234</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#ab566508ffd73abd4d5ad047a1d7f9c27">isTDJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>-><a class="code" href="classSVF_1_1ThreadCallGraph.html#adcad8524a53baf256cd45503ec568c10">getThreadAPI</a>()-><a class="code" href="classSVF_1_1ThreadAPI.html#a8cc5f9ff6039392ce1471cd830973c44">isTDJoin</a>(call);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MHP.html#a9b89800fe8089fd7521ef3f415f6eb12">getDirAndIndJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1MHP.html#afa0d341a2fb7b05522dc6e178eab7e8b">isJoinInSymmetricLoop</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call) <span class="keyword">const</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MHP.html#a6f07427b45991b2d8a3ff21582121d23">isHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799"> 248</a></span>  <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1MHP.html#a4b73d112880ad940e078e801f8725799">tcg</a>; </div><div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176"> 249</a></span>  <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>; </div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a98857a1837cef5519c938d07bb771a60"> 250</a></span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html">ForkJoinAnalysis</a>* <a class="code" href="classSVF_1_1MHP.html#a98857a1837cef5519c938d07bb771a60">fja</a>; </div><div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb"> 251</a></span>  CxtThreadStmtWorkList <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>; </div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541"> 252</a></span>  ThreadStmtToThreadInterleav <a class="code" href="classSVF_1_1MHP.html#afcfc409e625b74cbefd240170627c541">threadStmtToTheadInterLeav</a>; </div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f"> 253</a></span>  InstToThreadStmtSetMap <a class="code" href="classSVF_1_1MHP.html#a6b238ee6342da990840162845bba547f">instToTSMap</a>; </div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a1f057ef082484a1997cb02287e063f00"> 254</a></span>  FuncPairToBool <a class="code" href="classSVF_1_1MHP.html#a1f057ef082484a1997cb02287e063f00">nonCandidateFuncMHPRelMap</a>;</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> </div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#a26ae18993915d76b704232cded9811c2"> 258</a></span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MHP.html#a26ae18993915d76b704232cded9811c2">numOfTotalQueries</a>; </div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab8bd382e0c70b0feb2a291ecc4043106"> 259</a></span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MHP.html#ab8bd382e0c70b0feb2a291ecc4043106">numOfMHPQueries</a>; </div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#aca306b97c6dcd47a8f407038436473a2"> 260</a></span>  <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MHP.html#aca306b97c6dcd47a8f407038436473a2">interleavingTime</a>;</div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="classSVF_1_1MHP.html#ab7d9fe837844197b7acdc0493a50aaa5"> 261</a></span>  <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MHP.html#ab7d9fe837844197b7acdc0493a50aaa5">interleavingQueriesTime</a>;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</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> </div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html"> 269</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1ForkJoinAnalysis.html">ForkJoinAnalysis</a></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> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00274"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631"> 274</a></span>  <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  {</div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a9d940442c782d5a1297102209540182f"> 276</a></span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a9d940442c782d5a1297102209540182f">Empty</a>, <span class="comment">// initial(dummy) state</span></div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a"> 277</a></span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">TDAlive</a>, <span class="comment">// thread is alive</span></div><div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4"> 278</a></span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631ad5af2a561c196e33d88fc63363d0d8f4">TDDead</a>, <span class="comment">// thread is dead</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  };</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f"> 281</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1TCT.html#a13d01a1747d8ee1521596aeb36bdb655">TCT::InstVec</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">InstVec</a>;</div><div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acdc652faba35e45820cce0cdd20ea99c"> 282</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<CxtStmt,ValDomain></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acdc652faba35e45820cce0cdd20ea99c">CxtStmtToAliveFlagMap</a>;</div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a9b0d25255df73a5d7a0b9d30fe918200"> 283</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<CxtStmt,NodeBS></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a9b0d25255df73a5d7a0b9d30fe918200">CxtStmtToTIDMap</a>;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7fb8df483e619337e77088e8543a9846"> 284</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<NodePair></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7fb8df483e619337e77088e8543a9846">ThreadPairSet</a>;</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7a048ea1d9e80d4c122c1bbcacdea5f3"> 285</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<CxtStmt, const Loop*></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7a048ea1d9e80d4c122c1bbcacdea5f3">CxtStmtToLoopMap</a>;</div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a0ec0920d324604e3672db4d8dff93b1e"> 286</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList<CxtStmt></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a0ec0920d324604e3672db4d8dff93b1e">CxtStmtWorkList</a>;</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acd98a293bb20064cf5d0bb71c619fc54"> 287</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<const Instruction*, PTASCEV></a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acd98a293bb20064cf5d0bb71c619fc54">forkjoinToPTASCEVMap</a>;</div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a431ec90a12a62bb892e8b78f66a8f9dc"> 288</a></span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a431ec90a12a62bb892e8b78f66a8f9dc">ForkJoinAnalysis</a>(<a class="code" href="classSVF_1_1TCT.html">TCT</a>* t) : <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>(t)</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  collectSCEVInfo();</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordtype">void</span> collectSCEVInfo();</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordtype">void</span> analyzeForkJoinPair();</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a819ef18524ee9104b920d1a465c61da1"> 301</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a819ef18524ee9104b920d1a465c61da1">getDirectlyJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">return</span> directJoinMap[cs];</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MHP.html#a9b89800fe8089fd7521ef3f415f6eb12">getDirAndIndJoinedTid</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4e058b920c3648f943f85099690ff44f"> 309</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4e058b920c3648f943f85099690ff44f">isJoinInSymmetricLoop</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs)<span class="keyword"> const</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  CxtStmtToLoopMap::const_iterator it = cxtJoinInLoop.find(cs);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">if</span>(it!=cxtJoinInLoop.end())</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a86c68ce5fd8825b1593d92a5a5bad389"> 317</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a86c68ce5fd8825b1593d92a5a5bad389">isHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordtype">bool</span> nonhp = HBPair.find(std::make_pair(tid1,tid2))!=HBPair.end();</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordtype">bool</span> hp = HPPair.find(std::make_pair(tid1,tid2))!=HPPair.end();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">if</span>(nonhp && !hp)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  }</div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab55532eefbcef639ced957ad82fbd340"> 326</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab55532eefbcef639ced957ad82fbd340">isFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</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>  <span class="keywordtype">bool</span> full = fullJoin.find(std::make_pair(tid1,tid2))!=fullJoin.end();</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordtype">bool</span> partial = partialJoin.find(std::make_pair(tid1,tid2))!=partialJoin.end();</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">if</span>(full && !partial)</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acc178bd423dbb21bd46a9fae9ed0351c"> 336</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acc178bd423dbb21bd46a9fae9ed0351c">getExitInstOfParentRoutineFun</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)<span class="keyword"> const</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> parentTid = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a516578af1f8666ff672e6611e61d7152">getParentThread</a>(tid);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtThread.html">CxtThread</a>& parentct = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a7b4ad0b052e1f8b6869733eef15f4e4d">getTCTNode</a>(parentTid)-><a class="code" href="classSVF_1_1TCTNode.html#a21591b19f6a9267151c31178f9543ee6">getCxtThread</a>();</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* parentRoutine = <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a7ccacac1c673b38215b90e4eb480581f">getStartRoutineOfCxtThread</a>(parentct);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> &(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a3cb226930eeaf558575e09e5b65e0223">SVFUtil::getFunExitBB</a>(parentRoutine)->back());</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div><div class="line"><a name="l00345"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3449439792a54c847c67b3041094db49"> 345</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3449439792a54c847c67b3041094db49">getJoinLoop</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  {</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a52a707bf6f278e810f440c279f5261dc">getJoinLoop</a>(inst);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  }</div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ad3db3e7a2ebe7646675aab16103691e7"> 350</a></span>  <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#ad8794eb3c00de3d3b5c5e43dded3fb42">ScalarEvolution</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ad3db3e7a2ebe7646675aab16103691e7">getSE</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#ac66b3a193240c17c3f06437442b2d8bf">getSE</a>(inst);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a8a95f8ae419b66310ce6f572caea2ca5">handleFork</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a3a535274cd3349a05eeccf3c9231396a">handleJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af769afe6ba6baccda5a497df181c9fb0">handleCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cts,<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rootTid);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#a76ac9d388529f090ab6dad5829dd0753">handleRet</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cts);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MHP.html#af4d6f0884ce18ea5caf0dfd9799d1aae">handleIntra</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cts);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordtype">bool</span> isSameSCEV(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordtype">bool</span> sameLoopTripCount(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3655131add43346a175576b023e32509"> 378</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3655131add43346a175576b023e32509">isAliasedForkJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* forkSite, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* joinSite)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a5b087b42340d1a1b2ee37339637709d3">getPTA</a>()-><a class="code" href="classSVF_1_1PointerAnalysis.html#abd9da46106d820721a24201caaa164e1">alias</a>(getForkedThread(forkSite), getJoinedThread(joinSite)) && isSameSCEV(forkSite,joinSite);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="comment">// Get CallICFGNode</span></div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a94d65f9e22a13772042b2af652cf5538"> 383</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a94d65f9e22a13772042b2af652cf5538">getCBN</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst) {</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#afea9de8f27e501fdc2723cc14a8dc93f">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  }</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> getMarkedFlag(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  CxtStmtToAliveFlagMap::const_iterator it = cxtStmtToAliveFlagMap.find(cs);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">if</span>(it==cxtStmtToAliveFlagMap.end())</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  cxtStmtToAliveFlagMap[cs] = Empty;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordflow">return</span> Empty;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00401"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215"> 401</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ac483d3b0e9084c2033e177eda9ac9215">markCxtStmtFlag</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& tgr, <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag)</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_tgr = getMarkedFlag(tgr);</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  cxtStmtToAliveFlagMap[tgr] = flag;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keywordflow">if</span>(flag_tgr!=getMarkedFlag(tgr))</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a047fbff4be9f94ab12795cd371f60efa"> 409</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a047fbff4be9f94ab12795cd371f60efa">markCxtStmtFlag</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& tgr, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& src)</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_tgr = getMarkedFlag(tgr);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631">ValDomain</a> flag_src = getMarkedFlag(src);</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">if</span>(flag_tgr == Empty)</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  cxtStmtToAliveFlagMap[tgr] = flag_src;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(flag_tgr == TDDead)</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">if</span>(flag_src==TDAlive)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  cxtStmtToAliveFlagMap[tgr] = TDAlive;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">if</span>(flag_tgr!=getMarkedFlag(tgr))</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <a class="code" href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">pushToCTSWorkList</a>(tgr);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  }</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  }</div><div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7965a276a3a12d532c9967de13d4cc8a"> 432</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7965a276a3a12d532c9967de13d4cc8a">clearFlagMap</a>()</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  cxtStmtToAliveFlagMap.clear();</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a29d9fec1ea7b8e5456342522eea403ad">clear</a>();</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div><div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a7ac37e3399aa6e303a6babe8f455aa87"> 441</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a7ac37e3399aa6e303a6babe8f455aa87">pushToCTSWorkList</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(cs);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  }</div><div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4d893583db922444c6a29923bf3d05d3"> 445</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4d893583db922444c6a29923bf3d05d3">popFromCTSWorkList</a>()</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a> ctp = <a class="code" href="classSVF_1_1MHP.html#a0300d46dd22ee7cc8c62fada694d3acb">cxtStmtList</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">return</span> ctp;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div><div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a799e14292e16b9fb322cab07f3ff5593"> 453</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a799e14292e16b9fb322cab07f3ff5593">getNextInsts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, InstVec& instSet)</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  {</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a97c3081d0648a8d483b07f23bbd1b6bf">getNextInsts</a>(inst,instSet);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div><div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aaf70954762aa86f835d799994726790e"> 458</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aaf70954762aa86f835d799994726790e">pushCxt</a>(<a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#afc6d7a91cfc98561bcce13425964a39e">pushCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  }</div><div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aea9ef584ce6c7129bcd1d5ecda2f1f74"> 463</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aea9ef584ce6c7129bcd1d5ecda2f1f74">matchCxt</a>(<a class="code" href="namespaceSVF.html#a542c6d5483bfc74fa58b45ad06b65960">CallStrCxt</a>& cxt, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee)</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a9b6dda84d37afadaf80bc2e26986a52e">matchCxt</a>(cxt,call,callee);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  }</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div><div class="line"><a name="l00469"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aff32f240a03421937c2fc606359dca9b"> 469</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aff32f240a03421937c2fc606359dca9b">isTDFork</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">return</span> getTCG()->getThreadAPI()->isTDFork(call);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  }</div><div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aac722a42dc6e03e771a7a80de5f8ec94"> 474</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aac722a42dc6e03e771a7a80de5f8ec94">isTDJoin</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keywordflow">return</span> getTCG()->getThreadAPI()->isTDJoin(call);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  }</div><div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acd4308b99446c277ccb3407103fe21d0"> 479</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acd4308b99446c277ccb3407103fe21d0">getForkedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keywordflow">return</span> getTCG()->getThreadAPI()->getForkedThread(call);</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  }</div><div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ada1e56dfe2d64ea6310142a346c86ed4"> 484</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ada1e56dfe2d64ea6310142a346c86ed4">getJoinedThread</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* call)</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keywordflow">return</span> getTCG()->getThreadAPI()->getJoinedThread(call);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  }</div><div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#afcf119c89e93a24923dd0d97ddec7ee1"> 488</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>& <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#afcf119c89e93a24923dd0d97ddec7ee1">getCallee</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst, <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>& callees) {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  getTCG()->getCallees(<a class="code" href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55">getCBN</a>(inst), callees);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">return</span> callees;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  }</div><div class="line"><a name="l00493"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6"> 493</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1ThreadCallGraph.html">ThreadCallGraph</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">getTCG</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">tct</a>-><a class="code" href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">getThreadCallGraph</a>();</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  }</div><div class="line"><a name="l00498"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe"> 498</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a8aa2d4c83981007108b152d05e9c51fe">addDirectlyJoinTID</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid)</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  directJoinMap[cs].set(tid);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div><div class="line"><a name="l00506"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2"> 506</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2">addToHPPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  HPPair.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  HPPair.insert(std::make_pair(tid2,tid1));</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  }</div><div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a647ae6866bb37be850f0bdd5a7341188"> 511</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a647ae6866bb37be850f0bdd5a7341188">addToHBPair</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  HBPair.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  }</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div><div class="line"><a name="l00519"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4"> 519</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4">addToFullJoin</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  {</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  fullJoin.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  }</div><div class="line"><a name="l00523"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca"> 523</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca">addToPartial</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> tid2)</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  partialJoin.insert(std::make_pair(tid1,tid2));</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00530"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab302cceb28998623fed622560e50a740"> 530</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab302cceb28998623fed622560e50a740">addSymmetricLoopJoin</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CxtStmt.html">CxtStmt</a>& cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">Loop</a>* lp)</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  cxtJoinInLoop[cs] = lp;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  }</div><div class="line"><a name="l00534"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce"> 534</a></span>  <a class="code" href="classSVF_1_1TCT.html">TCT</a>* <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a2c6ce7aa04c399746d89230be0e0f1ce">tct</a>;</div><div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aa31b3f3d51b963ccd475e66b77143dba"> 535</a></span>  CxtStmtToAliveFlagMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aa31b3f3d51b963ccd475e66b77143dba">cxtStmtToAliveFlagMap</a>; </div><div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#acccf53d174cac3275da0d79c89a73916"> 536</a></span>  CxtStmtWorkList <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#acccf53d174cac3275da0d79c89a73916">cxtStmtList</a>; </div><div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#abf5b499f93a658636d09a62d14a47cad"> 537</a></span>  CxtStmtToTIDMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#abf5b499f93a658636d09a62d14a47cad">directJoinMap</a>; </div><div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be"> 538</a></span>  CxtStmtToTIDMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be">dirAndIndJoinMap</a>; </div><div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a63da48d338683ec95709a6bd95238707"> 539</a></span>  CxtStmtToLoopMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a63da48d338683ec95709a6bd95238707">cxtJoinInLoop</a>; </div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#aad3e722ecaa4a39aef0e1cabfa2b8019"> 540</a></span>  ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#aad3e722ecaa4a39aef0e1cabfa2b8019">HBPair</a>; </div><div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4ad5c7a21ca994d908d648ca9d9e1833"> 541</a></span>  ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4ad5c7a21ca994d908d648ca9d9e1833">HPPair</a>; </div><div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4193a30050195cd9aaafd58511b66ccc"> 542</a></span>  ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4193a30050195cd9aaafd58511b66ccc">fullJoin</a>; </div><div class="line"><a name="l00543"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a3616d6e1649f9e451da0f7a44cffc1e3"> 543</a></span>  ThreadPairSet <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a3616d6e1649f9e451da0f7a44cffc1e3">partialJoin</a>; </div><div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a1c616b61fbe9c713f51f2a44c4208cfa"> 544</a></span>  <a class="code" href="classSVF_1_1PTACFInfoBuilder.html">PTACFInfoBuilder</a> <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a1c616b61fbe9c713f51f2a44c4208cfa">ptaCFInfo</a>; </div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1ForkJoinAnalysis.html#a4207948054a0f98560922f3f07ada10f"> 545</a></span>  forkjoinToPTASCEVMap <a class="code" href="classSVF_1_1ForkJoinAnalysis.html#a4207948054a0f98560922f3f07ada10f">fkjnToPTASCEVMap</a>; <span class="comment">//< map a pointer at a fork/join site to its corresponing scev expression</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> };</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor">#endif </span><span class="comment">/* MHP_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1TCT_html_a7ccacac1c673b38215b90e4eb480581f"><div class="ttname"><a href="classSVF_1_1TCT.html#a7ccacac1c673b38215b90e4eb480581f">SVF::TCT::getStartRoutineOfCxtThread</a></div><div class="ttdeci">const Function * getStartRoutineOfCxtThread(const CxtThread &ct) const</div><div class="ttdoc">get the start routine function of a thread </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00334">TCT.h:334</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1MHP_html_aed7f65ea3f046774eef36602cb41f178"><div class="ttname"><a href="classSVF_1_1MHP.html#aed7f65ea3f046774eef36602cb41f178">SVF::MHP::pushToCTSWorkList</a></div><div class="ttdeci">bool pushToCTSWorkList(const CxtThreadStmt &cs)</div><div class="ttdoc">WorkList helper functions. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00218">MHP.h:218</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1MHP_html"><div class="ttname"><a href="classSVF_1_1MHP.html">SVF::MHP</a></div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00023">MHP.h:23</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1TCTNode_html_a5dd0cf88e381438d191b275314117561"><div class="ttname"><a href="classSVF_1_1TCTNode.html#a5dd0cf88e381438d191b275314117561">SVF::TCTNode::isMultiforked</a></div><div class="ttdeci">bool isMultiforked() const</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00101">TCT.h:101</a></div></div>
|
|
73
|
-
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a6a1ad5d1fa9e6884f3ffc4adf7578b91"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a6a1ad5d1fa9e6884f3ffc4adf7578b91">SVF::ForkJoinAnalysis::getCBN</a></div><div class="ttdeci">CallBlockNode * getCBN(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00383">MHP.h:383</a></div></div>
|
|
74
73
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_aa31b3f3d51b963ccd475e66b77143dba"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#aa31b3f3d51b963ccd475e66b77143dba">SVF::ForkJoinAnalysis::cxtStmtToAliveFlagMap</a></div><div class="ttdeci">CxtStmtToAliveFlagMap cxtStmtToAliveFlagMap</div><div class="ttdoc">flags for context-sensitive statements </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00535">MHP.h:535</a></div></div>
|
|
75
74
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a0ec0920d324604e3672db4d8dff93b1e"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a0ec0920d324604e3672db4d8dff93b1e">SVF::ForkJoinAnalysis::CxtStmtWorkList</a></div><div class="ttdeci">FIFOWorkList< CxtStmt > CxtStmtWorkList</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00286">MHP.h:286</a></div></div>
|
|
76
75
|
<div class="ttc" id="classSVF_1_1MHP_html_a1f057ef082484a1997cb02287e063f00"><div class="ttname"><a href="classSVF_1_1MHP.html#a1f057ef082484a1997cb02287e063f00">SVF::MHP::nonCandidateFuncMHPRelMap</a></div><div class="ttdeci">FuncPairToBool nonCandidateFuncMHPRelMap</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00254">MHP.h:254</a></div></div>
|
|
@@ -83,6 +82,7 @@ $(function() {
|
|
|
83
82
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a1505ba82206169f76ea239067797d6c2"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a1505ba82206169f76ea239067797d6c2">SVF::ForkJoinAnalysis::addToHPPair</a></div><div class="ttdeci">void addToHPPair(NodeID tid1, NodeID tid2)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00506">MHP.h:506</a></div></div>
|
|
84
83
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a7ac37e3399aa6e303a6babe8f455aa87"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a7ac37e3399aa6e303a6babe8f455aa87">SVF::ForkJoinAnalysis::pushToCTSWorkList</a></div><div class="ttdeci">bool pushToCTSWorkList(const CxtStmt &cs)</div><div class="ttdoc">Worklist operations. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00441">MHP.h:441</a></div></div>
|
|
85
84
|
<div class="ttc" id="classSVF_1_1MHP_html_ae3e240893d0950354d3d775e87d4adf9"><div class="ttname"><a href="classSVF_1_1MHP.html#ae3e240893d0950354d3d775e87d4adf9">SVF::MHP::InstToThreadStmtSetMap</a></div><div class="ttdeci">Map< const Instruction *, CxtThreadStmtSet > InstToThreadStmtSetMap</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00033">MHP.h:33</a></div></div>
|
|
85
|
+
<div class="ttc" id="classSVF_1_1MHP_html_aca4903cf3e3ef5b2ed5959e5e6181d55"><div class="ttname"><a href="classSVF_1_1MHP.html#aca4903cf3e3ef5b2ed5959e5e6181d55">SVF::MHP::getCBN</a></div><div class="ttdeci">CallICFGNode * getCBN(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00065">MHP.h:65</a></div></div>
|
|
86
86
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a02dad7e9ae45a1751c4548dd9991a8b4"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a02dad7e9ae45a1751c4548dd9991a8b4">SVF::ForkJoinAnalysis::addToFullJoin</a></div><div class="ttdeci">void addToFullJoin(NodeID tid1, NodeID tid2)</div><div class="ttdoc">full join and partial join </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00519">MHP.h:519</a></div></div>
|
|
87
87
|
<div class="ttc" id="classSVF_1_1MHP_html_ab7d9fe837844197b7acdc0493a50aaa5"><div class="ttname"><a href="classSVF_1_1MHP.html#ab7d9fe837844197b7acdc0493a50aaa5">SVF::MHP::interleavingQueriesTime</a></div><div class="ttdeci">double interleavingQueriesTime</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00261">MHP.h:261</a></div></div>
|
|
88
88
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a4207948054a0f98560922f3f07ada10f"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a4207948054a0f98560922f3f07ada10f">SVF::ForkJoinAnalysis::fkjnToPTASCEVMap</a></div><div class="ttdeci">forkjoinToPTASCEVMap fkjnToPTASCEVMap</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00545">MHP.h:545</a></div></div>
|
|
@@ -98,7 +98,6 @@ $(function() {
|
|
|
98
98
|
<div class="ttc" id="classSVF_1_1PTACallGraph_html_a5f5a5ec7e707a21994d301cc07d32a5a"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">SVF::PTACallGraph::FunctionSet</a></div><div class="ttdeci">Set< const SVFFunction * > FunctionSet</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00228">PTACallGraph.h:228</a></div></div>
|
|
99
99
|
<div class="ttc" id="classSVF_1_1CxtThread_html"><div class="ttname"><a href="classSVF_1_1CxtThread.html">SVF::CxtThread</a></div><div class="ttdef"><b>Definition:</b> <a href="CxtStmt_8h_source.html#l00188">CxtStmt.h:188</a></div></div>
|
|
100
100
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a4ad5c7a21ca994d908d648ca9d9e1833"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a4ad5c7a21ca994d908d648ca9d9e1833">SVF::ForkJoinAnalysis::HPPair</a></div><div class="ttdeci">ThreadPairSet HPPair</div><div class="ttdoc">threads happen-in-parallel </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00541">MHP.h:541</a></div></div>
|
|
101
|
-
<div class="ttc" id="classSVF_1_1TCT_html_a60a74209bd04b2c42fadee5c31e527d3"><div class="ttname"><a href="classSVF_1_1TCT.html#a60a74209bd04b2c42fadee5c31e527d3">SVF::TCT::getCallBlockNode</a></div><div class="ttdeci">CallBlockNode * getCallBlockNode(const Instruction *inst)</div><div class="ttdoc">Get CallBlockNode given inst. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00151">TCT.h:151</a></div></div>
|
|
102
101
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a613d763731058899e6819acdb2d7315f"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a613d763731058899e6819acdb2d7315f">SVF::ForkJoinAnalysis::InstVec</a></div><div class="ttdeci">TCT::InstVec InstVec</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00281">MHP.h:281</a></div></div>
|
|
103
102
|
<div class="ttc" id="classSVF_1_1MHP_html_a1cfec64cc65abcbc5ba32695850bfb48"><div class="ttname"><a href="classSVF_1_1MHP.html#a1cfec64cc65abcbc5ba32695850bfb48">SVF::MHP::isConnectedfromMain</a></div><div class="ttdeci">bool isConnectedfromMain(const Function *fun)</div><div class="ttdoc">Whether the function is connected from main function in thread call graph. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00544">MHP.cpp:544</a></div></div>
|
|
104
103
|
<div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
|
|
@@ -121,7 +120,6 @@ $(function() {
|
|
|
121
120
|
<div class="ttc" id="classSVF_1_1MHP_html_a04357a2827d22e4e727d488d32eb5cb5"><div class="ttname"><a href="classSVF_1_1MHP.html#a04357a2827d22e4e727d488d32eb5cb5">SVF::MHP::getNextInsts</a></div><div class="ttdeci">void getNextInsts(const Instruction *inst, InstVec &instVec)</div><div class="ttdoc">Get the next instructions following control flow. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00201">MHP.h:201</a></div></div>
|
|
122
121
|
<div class="ttc" id="classSVF_1_1MHP_html_a2c1e4fac7b810021939ed26307d37816"><div class="ttname"><a href="classSVF_1_1MHP.html#a2c1e4fac7b810021939ed26307d37816">SVF::MHP::handleNonCandidateFun</a></div><div class="ttdeci">void handleNonCandidateFun(const CxtThreadStmt &cts)</div><div class="ttdoc">Handle non-candidate function. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00219">MHP.cpp:219</a></div></div>
|
|
123
122
|
<div class="ttc" id="classSVF_1_1TCT_html_a5b087b42340d1a1b2ee37339637709d3"><div class="ttname"><a href="classSVF_1_1TCT.html#a5b087b42340d1a1b2ee37339637709d3">SVF::TCT::getPTA</a></div><div class="ttdeci">PointerAnalysis * getPTA() const</div><div class="ttdoc">Get PTA. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00169">TCT.h:169</a></div></div>
|
|
124
|
-
<div class="ttc" id="classSVF_1_1PTACallGraph_html_a486f79252c216eb5a9f4c09261a24ae2"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a486f79252c216eb5a9f4c09261a24ae2">SVF::PTACallGraph::getCallees</a></div><div class="ttdeci">void getCallees(const CallBlockNode *cs, FunctionSet &callees)</div><div class="ttdoc">Get all callees for a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00382">PTACallGraph.h:382</a></div></div>
|
|
125
123
|
<div class="ttc" id="classSVF_1_1CxtStmt_html_a5e8c4b10eb5c3240d2e21a020ed834a6"><div class="ttname"><a href="classSVF_1_1CxtStmt.html#a5e8c4b10eb5c3240d2e21a020ed834a6">SVF::CxtStmt::getStmt</a></div><div class="ttdeci">const Instruction * getStmt() const</div><div class="ttdoc">Return current statement. </div><div class="ttdef"><b>Definition:</b> <a href="CxtStmt_8h_source.html#l00062">CxtStmt.h:62</a></div></div>
|
|
126
124
|
<div class="ttc" id="classSVF_1_1MHP_html_ac30f283cb2ad020a054ee6525ca94025"><div class="ttname"><a href="classSVF_1_1MHP.html#ac30f283cb2ad020a054ee6525ca94025">SVF::MHP::ThreadStmtToThreadInterleav</a></div><div class="ttdeci">Map< CxtThreadStmt, NodeBS > ThreadStmtToThreadInterleav</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00032">MHP.h:32</a></div></div>
|
|
127
125
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a6ead92486459ec7f94a8375c7f96faca"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a6ead92486459ec7f94a8375c7f96faca">SVF::ForkJoinAnalysis::addToPartial</a></div><div class="ttdeci">void addToPartial(NodeID tid1, NodeID tid2)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00523">MHP.h:523</a></div></div>
|
|
@@ -171,7 +169,6 @@ $(function() {
|
|
|
171
169
|
<div class="ttc" id="classSVF_1_1MHP_html_a0356a8ccc53999549fb369f67faad306"><div class="ttname"><a href="classSVF_1_1MHP.html#a0356a8ccc53999549fb369f67faad306">SVF::MHP::isRecurFullJoin</a></div><div class="ttdeci">bool isRecurFullJoin(NodeID parentTid, NodeID curTid)</div><div class="ttdoc">Thread curTid can be fully joined by parentTid recurively. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00474">MHP.cpp:474</a></div></div>
|
|
172
170
|
<div class="ttc" id="classSVF_1_1MHP_html_a2faaa02abec3b8f8fca73e178cbdcb41"><div class="ttname"><a href="classSVF_1_1MHP.html#a2faaa02abec3b8f8fca73e178cbdcb41">SVF::MHP::mayHappenInParallelInst</a></div><div class="ttdeci">virtual bool mayHappenInParallelInst(const Instruction *i1, const Instruction *i2)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00579">MHP.cpp:579</a></div></div>
|
|
173
171
|
<div class="ttc" id="classSVF_1_1MHP_html_a033936547612c54326a604f0ff1e39a6"><div class="ttname"><a href="classSVF_1_1MHP.html#a033936547612c54326a604f0ff1e39a6">SVF::MHP::getTCT</a></div><div class="ttdeci">TCT * getTCT() const</div><div class="ttdoc">Get Thread Creation Tree. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00059">MHP.h:59</a></div></div>
|
|
174
|
-
<div class="ttc" id="classSVF_1_1MHP_html_ab956b55910ed74c4c81df622d38d746b"><div class="ttname"><a href="classSVF_1_1MHP.html#ab956b55910ed74c4c81df622d38d746b">SVF::MHP::getCBN</a></div><div class="ttdeci">CallBlockNode * getCBN(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00065">MHP.h:65</a></div></div>
|
|
175
172
|
<div class="ttc" id="classSVF_1_1MHP_html_a71183ff98500d1ce49170bab61fe664e"><div class="ttname"><a href="classSVF_1_1MHP.html#a71183ff98500d1ce49170bab61fe664e">SVF::MHP::getCallee</a></div><div class="ttdeci">const PTACallGraph::FunctionSet & getCallee(const Instruction *inst, PTACallGraph::FunctionSet &callees)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00119">MHP.h:119</a></div></div>
|
|
176
173
|
<div class="ttc" id="classSVF_1_1TCT_html_a516578af1f8666ff672e6611e61d7152"><div class="ttname"><a href="classSVF_1_1TCT.html#a516578af1f8666ff672e6611e61d7152">SVF::TCT::getParentThread</a></div><div class="ttdeci">NodeID getParentThread(NodeID tid) const</div><div class="ttdoc">Get parent thread. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00277">TCT.h:277</a></div></div>
|
|
177
174
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_ad3db3e7a2ebe7646675aab16103691e7"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#ad3db3e7a2ebe7646675aab16103691e7">SVF::ForkJoinAnalysis::getSE</a></div><div class="ttdeci">ScalarEvolution * getSE(const Instruction *inst)</div><div class="ttdoc">Get SE for function. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00350">MHP.h:350</a></div></div>
|
|
@@ -189,7 +186,9 @@ $(function() {
|
|
|
189
186
|
<div class="ttc" id="classSVF_1_1TCT_html_a9b6dda84d37afadaf80bc2e26986a52e"><div class="ttname"><a href="classSVF_1_1TCT.html#a9b6dda84d37afadaf80bc2e26986a52e">SVF::TCT::matchCxt</a></div><div class="ttdeci">bool matchCxt(CallStrCxt &cxt, const Instruction *call, const Function *callee)</div><div class="ttdoc">Match context. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8cpp_source.html#l00496">TCT.cpp:496</a></div></div>
|
|
190
187
|
<div class="ttc" id="classSVF_1_1MHP_html_a6343dd11dd75d3730dc463321a11445e"><div class="ttname"><a href="classSVF_1_1MHP.html#a6343dd11dd75d3730dc463321a11445e">SVF::MHP::addInterleavingThread</a></div><div class="ttdeci">void addInterleavingThread(const CxtThreadStmt &tgr, NodeID tid)</div><div class="ttdoc">Add/Remove interleaving thread for statement inst. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00150">MHP.h:150</a></div></div>
|
|
191
188
|
<div class="ttc" id="classSVF_1_1FIFOWorkList_html_a29d9fec1ea7b8e5456342522eea403ad"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a29d9fec1ea7b8e5456342522eea403ad">SVF::FIFOWorkList::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00186">WorkList.h:186</a></div></div>
|
|
189
|
+
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a94d65f9e22a13772042b2af652cf5538"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a94d65f9e22a13772042b2af652cf5538">SVF::ForkJoinAnalysis::getCBN</a></div><div class="ttdeci">CallICFGNode * getCBN(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00383">MHP.h:383</a></div></div>
|
|
192
190
|
<div class="ttc" id="classSVF_1_1MHP_html_ad8d3aa1a12fb1e8668eb4138fbe23b7d"><div class="ttname"><a href="classSVF_1_1MHP.html#ad8d3aa1a12fb1e8668eb4138fbe23b7d">SVF::MHP::popFromCTSWorkList</a></div><div class="ttdeci">CxtThreadStmt popFromCTSWorkList()</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00222">MHP.h:222</a></div></div>
|
|
191
|
+
<div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
|
|
193
192
|
<div class="ttc" id="classSVF_1_1PTACFInfoBuilder_html"><div class="ttname"><a href="classSVF_1_1PTACFInfoBuilder.html">SVF::PTACFInfoBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="DataFlowUtil_8h_source.html#l00122">DataFlowUtil.h:122</a></div></div>
|
|
194
193
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_ab5678bd46e573070827cc413f0e0d5be"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#ab5678bd46e573070827cc413f0e0d5be">SVF::ForkJoinAnalysis::dirAndIndJoinMap</a></div><div class="ttdeci">CxtStmtToTIDMap dirAndIndJoinMap</div><div class="ttdoc">maps a context-sensitive join site to directly and indirectly joined thread ids </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00538">MHP.h:538</a></div></div>
|
|
195
194
|
<div class="ttc" id="classSVF_1_1TCT_html_a1602d02773578bca73dcbd29b95c67d0"><div class="ttname"><a href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">SVF::TCT::getThreadCallGraph</a></div><div class="ttdeci">ThreadCallGraph * getThreadCallGraph() const</div><div class="ttdoc">Get TCG. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00164">TCT.h:164</a></div></div>
|
|
@@ -219,7 +218,7 @@ $(function() {
|
|
|
219
218
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a8d40e687caf8999369621ed385dfc631a2abecc56b7d5c644f7e14c98d33d0a0a">SVF::ForkJoinAnalysis::TDAlive</a></div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00277">MHP.h:277</a></div></div>
|
|
220
219
|
<div class="ttc" id="classSVF_1_1MHP_html_aeabf2e9ec8b1ec874503c83cc65e1205"><div class="ttname"><a href="classSVF_1_1MHP.html#aeabf2e9ec8b1ec874503c83cc65e1205">SVF::MHP::isTDFork</a></div><div class="ttdeci">bool isTDFork(const Instruction *call)</div><div class="ttdoc">Whether it is a fork site. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00229">MHP.h:229</a></div></div>
|
|
221
220
|
<div class="ttc" id="classSVF_1_1MHP_html_a176eefb65e4ba99ee70513c8add44176"><div class="ttname"><a href="classSVF_1_1MHP.html#a176eefb65e4ba99ee70513c8add44176">SVF::MHP::tct</a></div><div class="ttdeci">TCT * tct</div><div class="ttdoc">TCT. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00249">MHP.h:249</a></div></div>
|
|
222
|
-
<div class="ttc" id="
|
|
221
|
+
<div class="ttc" id="classSVF_1_1TCT_html_afea9de8f27e501fdc2723cc14a8dc93f"><div class="ttname"><a href="classSVF_1_1TCT.html#afea9de8f27e501fdc2723cc14a8dc93f">SVF::TCT::getCallBlockNode</a></div><div class="ttdeci">CallICFGNode * getCallBlockNode(const Instruction *inst)</div><div class="ttdoc">Get CallICFGNode given inst. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00151">TCT.h:151</a></div></div>
|
|
223
222
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a8ad9b8cb0e6300b2ffc55244e53cece6"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a8ad9b8cb0e6300b2ffc55244e53cece6">SVF::ForkJoinAnalysis::getTCG</a></div><div class="ttdeci">ThreadCallGraph * getTCG() const</div><div class="ttdoc">ThreadCallGraph. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00493">MHP.h:493</a></div></div>
|
|
224
223
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a819ef18524ee9104b920d1a465c61da1"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a819ef18524ee9104b920d1a465c61da1">SVF::ForkJoinAnalysis::getDirectlyJoinedTid</a></div><div class="ttdeci">NodeBS & getDirectlyJoinedTid(const CxtStmt &cs)</div><div class="ttdoc">Get directly joined threadIDs based on a context-sensitive join site. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00301">MHP.h:301</a></div></div>
|
|
225
224
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a047fbff4be9f94ab12795cd371f60efa"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a047fbff4be9f94ab12795cd371f60efa">SVF::ForkJoinAnalysis::markCxtStmtFlag</a></div><div class="ttdeci">void markCxtStmtFlag(const CxtStmt &tgr, const CxtStmt &src)</div><div class="ttdoc">Transfer function for marking context-sensitive statement. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00409">MHP.h:409</a></div></div>
|
|
@@ -234,6 +233,7 @@ $(function() {
|
|
|
234
233
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_a86c68ce5fd8825b1593d92a5a5bad389"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#a86c68ce5fd8825b1593d92a5a5bad389">SVF::ForkJoinAnalysis::isHBPair</a></div><div class="ttdeci">bool isHBPair(NodeID tid1, NodeID tid2)</div><div class="ttdoc">Whether thread t1 happens-before thread t2. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00317">MHP.h:317</a></div></div>
|
|
235
234
|
<div class="ttc" id="classSVF_1_1MHP_html_a49504524c0d3e53c769cdbfd9ec1ccb0"><div class="ttname"><a href="classSVF_1_1MHP.html#a49504524c0d3e53c769cdbfd9ec1ccb0">SVF::MHP::getThreadStmtSet</a></div><div class="ttdeci">const CxtThreadStmtSet & getThreadStmtSet(const Instruction *inst) const</div><div class="ttdoc">Get/has ThreadStmt. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00102">MHP.h:102</a></div></div>
|
|
236
235
|
<div class="ttc" id="classSVF_1_1MHP_html_a5546cb50ca769218a871cdda08a25d18"><div class="ttname"><a href="classSVF_1_1MHP.html#a5546cb50ca769218a871cdda08a25d18">SVF::MHP::rmInterleavingThread</a></div><div class="ttdeci">void rmInterleavingThread(const CxtThreadStmt &tgr, const NodeBS &tids, const Instruction *joinsite)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00167">MHP.h:167</a></div></div>
|
|
236
|
+
<div class="ttc" id="classSVF_1_1PTACallGraph_html_a317e09edb29b110cf4273009551d31ec"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a317e09edb29b110cf4273009551d31ec">SVF::PTACallGraph::getCallees</a></div><div class="ttdeci">void getCallees(const CallICFGNode *cs, FunctionSet &callees)</div><div class="ttdoc">Get all callees for a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00382">PTACallGraph.h:382</a></div></div>
|
|
237
237
|
<div class="ttc" id="classSVF_1_1MHP_html_a67e2d43f0e35cc46eb7680ec66a4fe44"><div class="ttname"><a href="classSVF_1_1MHP.html#a67e2d43f0e35cc46eb7680ec66a4fe44">SVF::MHP::pushCxt</a></div><div class="ttdeci">void pushCxt(CallStrCxt &cxt, const Instruction *call, const Function *callee)</div><div class="ttdoc">Push calling context. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00206">MHP.h:206</a></div></div>
|
|
238
238
|
</div><!-- fragment --></div><!-- contents -->
|
|
239
239
|
<!-- start footer part -->
|