svf-tools 1.0.573 → 1.0.574
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 +1 -1
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Annotator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp.html +2 -2
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +4 -4
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CFLGrammar_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +5 -5
- package/SVF-doxygen/html/html/CHG_8cpp.html +2 -2
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/CHG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +21 -21
- package/SVF-doxygen/html/html/CPPUtil_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CxtStmt_8h_source.html +4 -4
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +22 -22
- package/SVF-doxygen/html/html/DCHG_8h_source.html +9 -9
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +10 -10
- package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ExeState_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/GEPTypeBridgeIterator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ICFG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +10 -10
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +22 -20
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +13 -13
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +23 -23
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +16 -16
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +4 -4
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MHP_8cpp.html +2 -2
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/MHP_8h_source.html +6 -6
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +7 -7
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MTA_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemPartition_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +3 -3
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PCG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +7 -7
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +8 -0
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +84 -81
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +49 -52
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +45 -45
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFModule_8h_source.html +10 -10
- package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +10 -10
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +6 -6
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +28 -30
- package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +43 -47
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +34 -36
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +8 -8
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/TCT_8h_source.html +11 -11
- package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +6 -6
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +2 -2
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +0 -7
- package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +93 -94
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +3 -3
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Annotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1CFLStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallSite-members.html +18 -21
- package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +37 -120
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextCond.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtProc.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThread.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +57 -57
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +58 -56
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction-members.html +22 -17
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +279 -111
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +92 -98
- package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator-members.html +27 -28
- package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +118 -153
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +48 -50
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
- package/SVF-doxygen/html/html/classllvm_1_1generic__bridge__gep__type__iterator.html +3 -3
- package/SVF-doxygen/html/html/functions_a.html +7 -13
- package/SVF-doxygen/html/html/functions_b.html +7 -4
- package/SVF-doxygen/html/html/functions_func.html +10 -13
- package/SVF-doxygen/html/html/functions_func_g.html +14 -11
- package/SVF-doxygen/html/html/functions_func_h.html +5 -2
- package/SVF-doxygen/html/html/functions_func_i.html +5 -2
- package/SVF-doxygen/html/html/functions_func_s.html +11 -11
- package/SVF-doxygen/html/html/functions_g.html +16 -13
- package/SVF-doxygen/html/html/functions_h.html +6 -3
- package/SVF-doxygen/html/html/functions_i.html +10 -7
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_m.html +1 -1
- package/SVF-doxygen/html/html/functions_o.html +15 -15
- package/SVF-doxygen/html/html/functions_p.html +8 -12
- package/SVF-doxygen/html/html/functions_s.html +6 -6
- package/SVF-doxygen/html/html/functions_t.html +7 -7
- package/SVF-doxygen/html/html/functions_type.html +0 -3
- package/SVF-doxygen/html/html/functions_v.html +6 -6
- package/SVF-doxygen/html/html/functions_vars_b.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +11 -11
- package/SVF-doxygen/html/html/namespaceSVF.html +123 -120
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +47 -47
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +19 -19
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +40 -40
- package/SVF-doxygen/html/html/search/all_1.js +1 -3
- package/SVF-doxygen/html/html/search/all_10.js +6 -6
- package/SVF-doxygen/html/html/search/all_11.js +2 -2
- package/SVF-doxygen/html/html/search/all_12.js +9 -9
- package/SVF-doxygen/html/html/search/all_13.js +4 -4
- package/SVF-doxygen/html/html/search/all_15.js +3 -3
- package/SVF-doxygen/html/html/search/all_16.js +1 -1
- package/SVF-doxygen/html/html/search/all_2.js +1 -0
- package/SVF-doxygen/html/html/search/all_7.js +2 -1
- package/SVF-doxygen/html/html/search/all_8.js +1 -0
- package/SVF-doxygen/html/html/search/all_9.js +1 -0
- package/SVF-doxygen/html/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +3 -3
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- 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/functions_0.js +1 -2
- package/SVF-doxygen/html/html/search/functions_11.js +2 -2
- package/SVF-doxygen/html/html/search/functions_6.js +2 -1
- package/SVF-doxygen/html/html/search/functions_7.js +1 -0
- package/SVF-doxygen/html/html/search/functions_8.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_0.js +0 -1
- package/SVF-doxygen/html/html/search/variables_13.js +1 -1
- package/SVF-doxygen/html/html/search/variables_2.js +1 -0
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1PopulationCounter.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +3 -3
- 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 +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +4 -4
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +4 -4
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtProc_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmt_01_4.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +3 -3
- package/include/SABER/SaberCondAllocator.h +0 -7
- package/include/SVF-FE/BasicTypes.h +7 -0
- package/include/Util/BasicTypes.h +52 -17
- package/lib/SABER/SaberCondAllocator.cpp +7 -9
- package/lib/SVF-FE/LLVMModule.cpp +8 -0
- package/lib/SVF-FE/SVFIRBuilder.cpp +2 -2
- package/lib/SVF-FE/SymbolTableBuilder.cpp +2 -2
- package/package.json +1 -1
|
@@ -116,9 +116,6 @@ Public Member Functions</h2></td></tr>
|
|
|
116
116
|
<tr class="separator:a9f359b8e3d83bc2a92d4bc568ef62f76"><td class="memSeparator" colspan="2"> </td></tr>
|
|
117
117
|
<tr class="memitem:a6bcbb4475102221e7d71954f63d98558"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1SaberCondAllocator.html#a6bcbb4475102221e7d71954f63d98558">dominate</a> (const <a class="el" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *bbKey, const <a class="el" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *bbValue) const</td></tr>
|
|
118
118
|
<tr class="separator:a6bcbb4475102221e7d71954f63d98558"><td class="memSeparator" colspan="2"> </td></tr>
|
|
119
|
-
<tr class="memitem:a44932e57515b7ddcc192796679dd69be"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1SaberCondAllocator.html#a44932e57515b7ddcc192796679dd69be">getLoopInfo</a> (const <a class="el" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *f)</td></tr>
|
|
120
|
-
<tr class="memdesc:a44932e57515b7ddcc192796679dd69be"><td class="mdescLeft"> </td><td class="mdescRight">Get LoopInfo. <a href="#a44932e57515b7ddcc192796679dd69be">More...</a><br /></td></tr>
|
|
121
|
-
<tr class="separator:a44932e57515b7ddcc192796679dd69be"><td class="memSeparator" colspan="2"> </td></tr>
|
|
122
119
|
<tr class="memitem:a389fd522c1de5b4feed34f29b9709d03"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1SaberCondAllocator.html#a389fd522c1de5b4feed34f29b9709d03">printPathCond</a> ()</td></tr>
|
|
123
120
|
<tr class="memdesc:a389fd522c1de5b4feed34f29b9709d03"><td class="mdescLeft"> </td><td class="mdescRight">Print out the path condition information. <a href="#a389fd522c1de5b4feed34f29b9709d03">More...</a><br /></td></tr>
|
|
124
121
|
<tr class="separator:a389fd522c1de5b4feed34f29b9709d03"><td class="memSeparator" colspan="2"> </td></tr>
|
|
@@ -504,10 +501,10 @@ Static Private Attributes</h2></td></tr>
|
|
|
504
501
|
<p>Allocate path condition for each branch </p>
|
|
505
502
|
|
|
506
503
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00056">56</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
507
|
-
<div class="fragment"><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"path condition allocation starts\n"</span>));</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &func: *M)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(func))</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">// Allocate conditions for a program.</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">for</span> (Function::const_iterator bit = func->getLLVMFun()->begin(), ebit = func->getLLVMFun()->end();</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  bit != ebit; ++bit)</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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> &bb = *bit;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#adcb9b49512179e016765b50277fc058f">collectBBCallingProgExit</a>(bb);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6e1f93e7f0a5f9f78aa199982b698f9f">allocateForBB</a>(bb);</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>  }</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ae6b763ff293381ed5da9b07c2e8ae496">Options::PrintPathCond</a>)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a389fd522c1de5b4feed34f29b9709d03">printPathCond</a>();</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"path condition allocation ends\n"</span>));</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
504
|
+
<div class="fragment"><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"path condition allocation starts\n"</span>));</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &func: *M)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">if</span> (!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(func))</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">// Allocate conditions for a program.</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">for</span> (Function::const_iterator bit = func->getLLVMFun()->begin(), ebit = func->getLLVMFun()->end();</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  bit != ebit; ++bit)</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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> &bb = *bit;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#adcb9b49512179e016765b50277fc058f">collectBBCallingProgExit</a>(bb);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6e1f93e7f0a5f9f78aa199982b698f9f">allocateForBB</a>(bb);</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>  }</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#ae6b763ff293381ed5da9b07c2e8ae496">Options::PrintPathCond</a>)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a389fd522c1de5b4feed34f29b9709d03">printPathCond</a>();</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"path condition allocation ends\n"</span>));</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
508
505
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a609eea630a8f88fe9eaba15ce7e48738"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(std::string msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00099">SVFUtil.cpp:99</a></div></div>
|
|
509
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a389fd522c1de5b4feed34f29b9709d03"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a389fd522c1de5b4feed34f29b9709d03">SVF::SaberCondAllocator::printPathCond</a></div><div class="ttdeci">void printPathCond()</div><div class="ttdoc">Print out the path condition information. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
510
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_adcb9b49512179e016765b50277fc058f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#adcb9b49512179e016765b50277fc058f">SVF::SaberCondAllocator::collectBBCallingProgExit</a></div><div class="ttdeci">void collectBBCallingProgExit(const BasicBlock &bb)</div><div class="ttdoc">Collect basic block contains program exit function call. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
506
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a389fd522c1de5b4feed34f29b9709d03"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a389fd522c1de5b4feed34f29b9709d03">SVF::SaberCondAllocator::printPathCond</a></div><div class="ttdeci">void printPathCond()</div><div class="ttdoc">Print out the path condition information. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00557">SaberCondAllocator.cpp:557</a></div></div>
|
|
507
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_adcb9b49512179e016765b50277fc058f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#adcb9b49512179e016765b50277fc058f">SVF::SaberCondAllocator::collectBBCallingProgExit</a></div><div class="ttdeci">void collectBBCallingProgExit(const BasicBlock &bb)</div><div class="ttdoc">Collect basic block contains program exit function call. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00410">SaberCondAllocator.cpp:410</a></div></div>
|
|
511
508
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
512
509
|
<div class="ttc" id="SVFBasicTypes_8h_html_a2c64190a065f342897573a3ef4973adb"><div class="ttname"><a href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a></div><div class="ttdeci">#define DGENERAL</div><div class="ttdoc">General debug flag is for each phase of a pass, it is often in a colorful output format. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00160">SVFBasicTypes.h:160</a></div></div>
|
|
513
510
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a6e1f93e7f0a5f9f78aa199982b698f9f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a6e1f93e7f0a5f9f78aa199982b698f9f">SVF::SaberCondAllocator::allocateForBB</a></div><div class="ttdeci">virtual void allocateForBB(const BasicBlock &bb)</div><div class="ttdoc">Allocate path condition for every basic block. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00084">SaberCondAllocator.cpp:84</a></div></div>
|
|
@@ -546,14 +543,14 @@ Static Private Attributes</h2></td></tr>
|
|
|
546
543
|
<p>TODO: handle BranchInst and SwitchInst individually here!! </p>
|
|
547
544
|
|
|
548
545
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00084">84</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
549
|
-
<div class="fragment"><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> succ_number = <a class="code" href="classSVF_1_1SymbolTableInfo.html#ad15427845b821e3308bc4fdc45d912b9">SymbolTableInfo::getBBSuccessorNum</a>(&bb);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="comment">// if successor number greater than 1, allocate new decision variable for successors</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">if</span> (succ_number > 1)</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> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="comment">//allocate log2(num_succ) decision variables</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordtype">double</span> num = log(succ_number) / log(2);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> bit_num = (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) ceil(num);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> succ_index = 0;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  std::vector<Condition> condVec;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < bit_num; i++)</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  condVec.push_back(<a class="code" href="classSVF_1_1SaberCondAllocator.html#a5a39b2efcec1c77e7f06dda7b64c9765">newCond</a>(bb.getTerminator()));</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// iterate each successor</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> succ_it = succ_begin(&bb);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  succ_it != succ_end(&bb);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  succ_it++, succ_index++)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ = *succ_it;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> path_cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="comment">// for each successor decide its bit representation</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="comment">// decide whether each bit of succ_index is 1 or 0, if (three successor) succ_index is 000 then use C1^C2^C3</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="comment">// if 001 use C1^C2^negC3</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j < bit_num; j++)</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="comment">//test each bit of this successor's index (binary representation)</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> tool = 0x01 << j;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">if</span> (tool & succ_index)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  path_cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(path_cond, (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817">condNeg</a>(condVec.at(j))));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  path_cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(path_cond, condVec.at(j));</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#af3d224fdc92de272363f411b8f8c2a09">setBranchCond</a>(&bb, succ, path_cond);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
546
|
+
<div class="fragment"><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> succ_number = <a class="code" href="classSVF_1_1SymbolTableInfo.html#ad15427845b821e3308bc4fdc45d912b9">SymbolTableInfo::getBBSuccessorNum</a>(&bb);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="comment">// if successor number greater than 1, allocate new decision variable for successors</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">if</span> (succ_number > 1)</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> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="comment">//allocate log2(num_succ) decision variables</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordtype">double</span> num = log(succ_number) / log(2);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> bit_num = (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a>) ceil(num);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> succ_index = 0;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  std::vector<Condition> condVec;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < bit_num; i++)</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  condVec.push_back(<a class="code" href="classSVF_1_1SaberCondAllocator.html#a5a39b2efcec1c77e7f06dda7b64c9765">newCond</a>(bb.getTerminator()));</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// iterate each successor</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> succ_it = succ_begin(&bb);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  succ_it != succ_end(&bb);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  succ_it++, succ_index++)</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ = *succ_it;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> path_cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="comment">// for each successor decide its bit representation</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="comment">// decide whether each bit of succ_index is 1 or 0, if (three successor) succ_index is 000 then use C1^C2^C3</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="comment">// if 001 use C1^C2^negC3</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> j = 0; j < bit_num; j++)</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="comment">//test each bit of this successor's index (binary representation)</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> tool = 0x01 << j;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">if</span> (tool & succ_index)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  path_cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(path_cond, (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817">condNeg</a>(condVec.at(j))));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  path_cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(path_cond, condVec.at(j));</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#af3d224fdc92de272363f411b8f8c2a09">setBranchCond</a>(&bb, succ, path_cond);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
550
547
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
551
|
-
<div class="ttc" id="namespaceSVF_html_a3436a988bf80c021cd8022fb445b66d5"><div class="ttname"><a href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">SVF::succ_const_iterator</a></div><div class="ttdeci">llvm::succ_const_iterator succ_const_iterator</div><div class="ttdoc">LLVM Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
548
|
+
<div class="ttc" id="namespaceSVF_html_a3436a988bf80c021cd8022fb445b66d5"><div class="ttname"><a href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">SVF::succ_const_iterator</a></div><div class="ttdeci">llvm::succ_const_iterator succ_const_iterator</div><div class="ttdoc">LLVM Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00107">BasicTypes.h:107</a></div></div>
|
|
552
549
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
553
550
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a620d53b9af8dd30523c478f4e9655817"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817">SVF::SaberCondAllocator::condNeg</a></div><div class="ttdeci">Condition condNeg(const Condition &cond)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00095">SaberCondAllocator.h:95</a></div></div>
|
|
554
551
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a79682a4e4da23d0eaf0066a91c2f7bd4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">SVF::SaberCondAllocator::condAnd</a></div><div class="ttdeci">Condition condAnd(const Condition &lhs, const Condition &rhs)</div><div class="ttdoc">Condition operations. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00087">SaberCondAllocator.h:87</a></div></div>
|
|
555
552
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00099">SaberCondAllocator.h:99</a></div></div>
|
|
556
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5a39b2efcec1c77e7f06dda7b64c9765"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5a39b2efcec1c77e7f06dda7b64c9765">SVF::SaberCondAllocator::newCond</a></div><div class="ttdeci">Condition newCond(const Instruction *inst)</div><div class="ttdoc">Allocate a new condition. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
553
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5a39b2efcec1c77e7f06dda7b64c9765"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5a39b2efcec1c77e7f06dda7b64c9765">SVF::SaberCondAllocator::newCond</a></div><div class="ttdeci">Condition newCond(const Instruction *inst)</div><div class="ttdoc">Allocate a new condition. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00584">SaberCondAllocator.cpp:584</a></div></div>
|
|
557
554
|
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html_ad15427845b821e3308bc4fdc45d912b9"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ad15427845b821e3308bc4fdc45d912b9">SVF::SymbolTableInfo::getBBSuccessorNum</a></div><div class="ttdeci">static const u32_t getBBSuccessorNum(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00346">SymbolTableInfo.cpp:346</a></div></div>
|
|
558
555
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_af3d224fdc92de272363f411b8f8c2a09"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#af3d224fdc92de272363f411b8f8c2a09">SVF::SaberCondAllocator::setBranchCond</a></div><div class="ttdeci">void setBranchCond(const BasicBlock *bb, const BasicBlock *succ, const Condition &cond)</div><div class="ttdoc">Get/Set a branch condition, and its terminator instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00166">SaberCondAllocator.cpp:166</a></div></div>
|
|
559
556
|
</div><!-- fragment -->
|
|
@@ -582,8 +579,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
582
579
|
</table>
|
|
583
580
|
</div><div class="memdoc">
|
|
584
581
|
|
|
585
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
586
|
-
<div class="fragment"><div class="line"><a name="
|
|
582
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00175">175</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
583
|
+
<div class="fragment"><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_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.clear();</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a6d29487d00d66dadae7b4b79f9bf50e9"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">SVF::SaberCondAllocator::bbToCondMap</a></div><div class="ttdeci">BBToCondMap bbToCondMap</div><div class="ttdoc">map a basic block to its path condition starting from root </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00296">SaberCondAllocator.h:296</a></div></div>
|
|
587
584
|
</div><!-- fragment -->
|
|
588
585
|
</div>
|
|
589
586
|
</div>
|
|
@@ -614,11 +611,11 @@ Static Private Attributes</h2></td></tr>
|
|
|
614
611
|
<p>Collect basic block contains program exit function call. </p>
|
|
615
612
|
<p>Whether this basic block contains program exit function call </p>
|
|
616
613
|
|
|
617
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
618
|
-
<div class="fragment"><div class="line"><a name="
|
|
619
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad1620cc7482aeb464b53cfce64e17cc3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">SVF::SaberCondAllocator::funToExitBBsMap</a></div><div class="ttdeci">FunToExitBBsMap funToExitBBsMap</div><div class="ttdoc">map a function to all its basic blocks calling program exit </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
614
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00410">410</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
615
|
+
<div class="fragment"><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> {</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">for</span> (BasicBlock::const_iterator it = bb.begin(), eit = bb.end(); it != eit; it++)</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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = &*it;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVFUtil::isCallSite</a>(inst))</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a6528edf9a1750df4a84d1a60d4d0bbe4">SVFUtil::isProgExitCall</a>(inst))</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>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">funToExitBBsMap</a>[bb.getParent()].insert(&bb);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  }</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> }</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a2e08ce822223842fa6a73fd659b1a526"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a2e08ce822223842fa6a73fd659b1a526">SVF::SVFUtil::isCallSite</a></div><div class="ttdeci">bool isCallSite(const Instruction *inst)</div><div class="ttdoc">Whether an instruction is a call or invoke instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00196">SVFUtil.h:196</a></div></div>
|
|
616
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad1620cc7482aeb464b53cfce64e17cc3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">SVF::SaberCondAllocator::funToExitBBsMap</a></div><div class="ttdeci">FunToExitBBsMap funToExitBBsMap</div><div class="ttdoc">map a function to all its basic blocks calling program exit </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00295">SaberCondAllocator.h:295</a></div></div>
|
|
620
617
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a6528edf9a1750df4a84d1a60d4d0bbe4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a6528edf9a1750df4a84d1a60d4d0bbe4">SVF::SVFUtil::isProgExitCall</a></div><div class="ttdeci">bool isProgExitCall(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00705">SVFUtil.h:705</a></div></div>
|
|
621
|
-
<div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
618
|
+
<div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00072">BasicTypes.h:72</a></div></div>
|
|
622
619
|
</div><!-- fragment -->
|
|
623
620
|
</div>
|
|
624
621
|
</div>
|
|
@@ -663,12 +660,12 @@ Static Private Attributes</h2></td></tr>
|
|
|
663
660
|
</div><div class="memdoc">
|
|
664
661
|
<p>Compute calling inter-procedural guards between two SVFGNodes (from caller to callee) src –c1–> callBB –true–> funEntryBB –c2–> dst the InterCallVFGGuard is c1 ^ c2 </p>
|
|
665
662
|
|
|
666
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
667
|
-
<div class="fragment"><div class="line"><a name="
|
|
668
|
-
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
663
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00469">469</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
664
|
+
<div class="fragment"><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> {</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *funEntryBB = &dstBB->getParent()->getEntryBlock();</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> c1 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(srcBB, callBB);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">setCFCond</a>(funEntryBB, <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">condOr</a>(<a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(funEntryBB), <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(callBB)));</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> c2 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(funEntryBB, dstBB);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(c1, c2);</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a49a7146006e286c6ffb5668687a5a92f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">SVF::SaberCondAllocator::getCFCond</a></div><div class="ttdeci">Condition getCFCond(const BasicBlock *bb) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00223">SaberCondAllocator.h:223</a></div></div>
|
|
665
|
+
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
669
666
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
670
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ae7aea2293ca15894af66a98649d25f5b"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">SVF::SaberCondAllocator::setCFCond</a></div><div class="ttdeci">bool setCFCond(const BasicBlock *bb, const Condition &cond)</div><div class="ttdoc">Get/Set control-flow conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
671
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
667
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ae7aea2293ca15894af66a98649d25f5b"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">SVF::SaberCondAllocator::setCFCond</a></div><div class="ttdeci">bool setCFCond(const BasicBlock *bb, const Condition &cond)</div><div class="ttdoc">Get/Set control-flow conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00213">SaberCondAllocator.h:213</a></div></div>
|
|
668
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00500">SaberCondAllocator.cpp:500</a></div></div>
|
|
672
669
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a2e4c3f5149a5085a5c8bb7547eae8161"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">SVF::SaberCondAllocator::condOr</a></div><div class="ttdeci">Condition condOr(const Condition &lhs, const Condition &rhs)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00091">SaberCondAllocator.h:91</a></div></div>
|
|
673
670
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a79682a4e4da23d0eaf0066a91c2f7bd4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">SVF::SaberCondAllocator::condAnd</a></div><div class="ttdeci">Condition condAnd(const Condition &lhs, const Condition &rhs)</div><div class="ttdoc">Condition operations. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00087">SaberCondAllocator.h:87</a></div></div>
|
|
674
671
|
</div><!-- fragment -->
|
|
@@ -715,16 +712,16 @@ Static Private Attributes</h2></td></tr>
|
|
|
715
712
|
</div><div class="memdoc">
|
|
716
713
|
<p>Compute return inter-procedural guards between two SVFGNodes (from callee to caller) src –c1–> funExitBB –true–> retBB –c2–> dst the InterRetVFGGuard is c1 ^ c2 </p>
|
|
717
714
|
|
|
718
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
719
|
-
<div class="fragment"><div class="line"><a name="
|
|
720
|
-
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
715
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00486">486</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
716
|
+
<div class="fragment"><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* parent = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(srcBB->getParent());</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* funExitBB = parent-><a class="code" href="classSVF_1_1SVFFunction.html#ae7f366f62080286448602698d45ec095">getExitBB</a>();</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> c1 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(srcBB, funExitBB);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">setCFCond</a>(retBB, <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">condOr</a>(<a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(retBB), <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(funExitBB)));</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> c2 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(retBB, dstBB);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(c1, c2);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a49a7146006e286c6ffb5668687a5a92f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">SVF::SaberCondAllocator::getCFCond</a></div><div class="ttdeci">Condition getCFCond(const BasicBlock *bb) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00223">SaberCondAllocator.h:223</a></div></div>
|
|
717
|
+
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
721
718
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
722
|
-
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
723
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ae7aea2293ca15894af66a98649d25f5b"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">SVF::SaberCondAllocator::setCFCond</a></div><div class="ttdeci">bool setCFCond(const BasicBlock *bb, const Condition &cond)</div><div class="ttdoc">Get/Set control-flow conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
724
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
719
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00115">BasicTypes.h:115</a></div></div>
|
|
720
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ae7aea2293ca15894af66a98649d25f5b"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">SVF::SaberCondAllocator::setCFCond</a></div><div class="ttdeci">bool setCFCond(const BasicBlock *bb, const Condition &cond)</div><div class="ttdoc">Get/Set control-flow conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00213">SaberCondAllocator.h:213</a></div></div>
|
|
721
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00500">SaberCondAllocator.cpp:500</a></div></div>
|
|
725
722
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a2e4c3f5149a5085a5c8bb7547eae8161"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">SVF::SaberCondAllocator::condOr</a></div><div class="ttdeci">Condition condOr(const Condition &lhs, const Condition &rhs)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00091">SaberCondAllocator.h:91</a></div></div>
|
|
726
723
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a79682a4e4da23d0eaf0066a91c2f7bd4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">SVF::SaberCondAllocator::condAnd</a></div><div class="ttdeci">Condition condAnd(const Condition &lhs, const Condition &rhs)</div><div class="ttdoc">Condition operations. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00087">SaberCondAllocator.h:87</a></div></div>
|
|
727
|
-
<div class="ttc" id="classSVF_1_1SVFFunction_html_ae7f366f62080286448602698d45ec095"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ae7f366f62080286448602698d45ec095">SVF::SVFFunction::getExitBB</a></div><div class="ttdeci">const BasicBlock * getExitBB() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
724
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html_ae7f366f62080286448602698d45ec095"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ae7f366f62080286448602698d45ec095">SVF::SVFFunction::getExitBB</a></div><div class="ttdeci">const BasicBlock * getExitBB() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00264">BasicTypes.h:264</a></div></div>
|
|
728
725
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00070">LLVMModule.h:70</a></div></div>
|
|
729
726
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a547b3bc62de65b9dbfc6dee55c063dd7"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">const SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00114">LLVMModule.h:114</a></div></div>
|
|
730
727
|
</div><!-- fragment -->
|
|
@@ -769,14 +766,14 @@ Static Private Attributes</h2></td></tr>
|
|
|
769
766
|
<p>if the dstBB is the eligible loop exit of the current basic block we can early terminate the computation</p>
|
|
770
767
|
<p>calculate the branch condition if succ post dominate bb, then we get brCond quicker by using postDT note that we assume loop exit always post dominate loop bodys which means loops are approximated only once. </p>
|
|
771
768
|
|
|
772
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
773
|
-
<div class="fragment"><div class="line"><a name="
|
|
769
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00500">500</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
770
|
+
<div class="fragment"><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="l00503"></a><span class="lineno"> 503</span>  assert(srcBB->getParent() == dstBB->getParent() && <span class="stringliteral">"two basic blocks are not in the same function??"</span>);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f359b8e3d83bc2a92d4bc568ef62f76">postDominate</a>(dstBB, srcBB))</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</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>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a52ec71159bc70b450895990dfebdedac">CFWorkList</a> worklist;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  worklist.push(srcBB);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">setCFCond</a>(srcBB, <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>());</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keywordflow">while</span> (!worklist.empty())</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *bb = worklist.pop();</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(bb);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> loopExitCond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4c3945abc15c6caeb9d026f47e78a340">evaluateLoopExitBranch</a>(bb, dstBB);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="keywordflow">if</span> (!eq(loopExitCond, <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>()))</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(cond, loopExitCond);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> succ_it = succ_begin(bb);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  succ_it != succ_end(bb); succ_it++)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ = *succ_it;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> brCond;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f359b8e3d83bc2a92d4bc568ef62f76">postDominate</a>(succ, bb))</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  brCond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  brCond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a8926da3e50d32bd1fcf0a011417d445c">getEvalBrCond</a>(bb, succ);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" bb ("</span> << bb->getName().str() <<</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="stringliteral">") --> "</span> << <span class="stringliteral">"succ_bb ("</span> << succ->getName().str() << <span class="stringliteral">") condition: "</span> << brCond << <span class="stringliteral">"\n"</span>);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> succPathCond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">condAnd</a>(cond, brCond);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">setCFCond</a>(succ, <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">condOr</a>(<a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(succ), succPathCond)))</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  worklist.push(succ);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  }</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" src_bb ("</span> << srcBB->getName().str() <<</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="stringliteral">") --> "</span> << <span class="stringliteral">"dst_bb ("</span> << dstBB->getName().str() << <span class="stringliteral">") condition: "</span> << <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(dstBB)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  << <span class="stringliteral">"\n"</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="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">getCFCond</a>(dstBB);</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a8926da3e50d32bd1fcf0a011417d445c"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a8926da3e50d32bd1fcf0a011417d445c">SVF::SaberCondAllocator::getEvalBrCond</a></div><div class="ttdeci">Condition getEvalBrCond(const BasicBlock *bb, const BasicBlock *succ)</div><div class="ttdoc">Get a condition, evaluate the value for conditions if necessary (e.g., testNull like express) ...</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00155">SaberCondAllocator.cpp:155</a></div></div>
|
|
774
771
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9f359b8e3d83bc2a92d4bc568ef62f76"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9f359b8e3d83bc2a92d4bc568ef62f76">SVF::SaberCondAllocator::postDominate</a></div><div class="ttdeci">bool postDominate(const BasicBlock *bbKey, const BasicBlock *bbValue) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00147">SaberCondAllocator.h:147</a></div></div>
|
|
775
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a49a7146006e286c6ffb5668687a5a92f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">SVF::SaberCondAllocator::getCFCond</a></div><div class="ttdeci">Condition getCFCond(const BasicBlock *bb) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
776
|
-
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
772
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a49a7146006e286c6ffb5668687a5a92f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a49a7146006e286c6ffb5668687a5a92f">SVF::SaberCondAllocator::getCFCond</a></div><div class="ttdeci">Condition getCFCond(const BasicBlock *bb) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00223">SaberCondAllocator.h:223</a></div></div>
|
|
773
|
+
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
777
774
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
778
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ae7aea2293ca15894af66a98649d25f5b"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">SVF::SaberCondAllocator::setCFCond</a></div><div class="ttdeci">bool setCFCond(const BasicBlock *bb, const Condition &cond)</div><div class="ttdoc">Get/Set control-flow conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
779
|
-
<div class="ttc" id="namespaceSVF_html_a3436a988bf80c021cd8022fb445b66d5"><div class="ttname"><a href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">SVF::succ_const_iterator</a></div><div class="ttdeci">llvm::succ_const_iterator succ_const_iterator</div><div class="ttdoc">LLVM Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
775
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ae7aea2293ca15894af66a98649d25f5b"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ae7aea2293ca15894af66a98649d25f5b">SVF::SaberCondAllocator::setCFCond</a></div><div class="ttdeci">bool setCFCond(const BasicBlock *bb, const Condition &cond)</div><div class="ttdoc">Get/Set control-flow conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00213">SaberCondAllocator.h:213</a></div></div>
|
|
776
|
+
<div class="ttc" id="namespaceSVF_html_a3436a988bf80c021cd8022fb445b66d5"><div class="ttname"><a href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">SVF::succ_const_iterator</a></div><div class="ttdeci">llvm::succ_const_iterator succ_const_iterator</div><div class="ttdoc">LLVM Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00107">BasicTypes.h:107</a></div></div>
|
|
780
777
|
<div class="ttc" id="SVFBasicTypes_8h_html_a817abc424f7cfcdec5954c7807970f36"><div class="ttname"><a href="SVFBasicTypes_8h.html#a817abc424f7cfcdec5954c7807970f36">DSaber</a></div><div class="ttdeci">#define DSaber</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00174">SVFBasicTypes.h:174</a></div></div>
|
|
781
778
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a2e4c3f5149a5085a5c8bb7547eae8161"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a2e4c3f5149a5085a5c8bb7547eae8161">SVF::SaberCondAllocator::condOr</a></div><div class="ttdeci">Condition condOr(const Condition &lhs, const Condition &rhs)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00091">SaberCondAllocator.h:91</a></div></div>
|
|
782
779
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a79682a4e4da23d0eaf0066a91c2f7bd4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a79682a4e4da23d0eaf0066a91c2f7bd4">SVF::SaberCondAllocator::condAnd</a></div><div class="ttdeci">Condition condAnd(const Condition &lhs, const Condition &rhs)</div><div class="ttdoc">Condition operations. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00087">SaberCondAllocator.h:87</a></div></div>
|
|
@@ -923,8 +920,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
923
920
|
|
|
924
921
|
<p>Release memory. </p>
|
|
925
922
|
|
|
926
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
927
|
-
<div class="fragment"><div class="line"><a name="
|
|
923
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00285">285</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
924
|
+
<div class="fragment"><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  }</div></div><!-- fragment -->
|
|
928
925
|
</div>
|
|
929
926
|
</div>
|
|
930
927
|
<a id="a6bcbb4475102221e7d71954f63d98558"></a>
|
|
@@ -1034,15 +1031,15 @@ Static Private Attributes</h2></td></tr>
|
|
|
1034
1031
|
<p>Evaluate the branch condtion</p>
|
|
1035
1032
|
<p>(1) Evaluate a branch when it reaches a program exit (2) Evaluate a branch when it is loop exit branch (3) Evaluate a branch when it is a test null like condition </p>
|
|
1036
1033
|
|
|
1037
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1038
|
-
<div class="fragment"><div class="line"><a name="
|
|
1034
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00294">294</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1035
|
+
<div class="fragment"><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SymbolTableInfo.html#ad15427845b821e3308bc4fdc45d912b9">SymbolTableInfo::getBBSuccessorNum</a>(bb) == 1)</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  assert(bb->getTerminator()->getSuccessor(0) == succ && <span class="stringliteral">"not the unique successor?"</span>);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a> *icfgNode = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6bd67514e0ea9a2704ae83a38c9f2592">getICFG</a>()->getICFGNode(bb->getTerminator()))</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &svfStmt: icfgNode->getSVFStmts())</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  {</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a> *branchStmt = SVFUtil::dyn_cast<BranchStmt>(svfStmt))</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">if</span> (branchStmt->getNumSuccessors() == 2)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ1 = branchStmt->getSuccessor(0)->getBB();</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ2 = branchStmt->getSuccessor(1)->getBB();</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  assert((succ1 == succ || succ2 == succ) && <span class="stringliteral">"not a successor??"</span>);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> evalLoopExit = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4c3945abc15c6caeb9d026f47e78a340">evaluateLoopExitBranch</a>(bb, succ);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keywordflow">if</span> (!eq(evalLoopExit, <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>()))</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordflow">return</span> evalLoopExit;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> evalProgExit = <a class="code" href="classSVF_1_1SaberCondAllocator.html#aac1988c13622c0755d491f0bc2b834df">evaluateProgExit</a>(branchStmt, succ);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">if</span> (!eq(evalProgExit, <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>()))</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">return</span> evalProgExit;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> evalTestNullLike = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad049eeed763a5f18267b9288f728b070">evaluateTestNullLikeExpr</a>(branchStmt, succ);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordflow">if</span> (!eq(evalTestNullLike, <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>()))</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">return</span> evalTestNullLike;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</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>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2b1c2e7764631d40a5b8d0ce2cc73442">getBranchCond</a>(bb, succ);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
1039
1036
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aac1988c13622c0755d491f0bc2b834df"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aac1988c13622c0755d491f0bc2b834df">SVF::SaberCondAllocator::evaluateProgExit</a></div><div class="ttdeci">Condition evaluateProgExit(const BranchStmt *branchStmt, const BasicBlock *succ)</div><div class="ttdoc">Return condition when there is a branch calls program exit. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00213">SaberCondAllocator.cpp:213</a></div></div>
|
|
1040
1037
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
1041
1038
|
<div class="ttc" id="classSVF_1_1ICFGNode_html"><div class="ttname"><a href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00054">ICFGNode.h:54</a></div></div>
|
|
1042
1039
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a2b1c2e7764631d40a5b8d0ce2cc73442"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a2b1c2e7764631d40a5b8d0ce2cc73442">SVF::SaberCondAllocator::getBranchCond</a></div><div class="ttdeci">Condition getBranchCond(const BasicBlock *bb, const BasicBlock *succ) const</div><div class="ttdoc">Get branch condition. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00140">SaberCondAllocator.cpp:140</a></div></div>
|
|
1043
1040
|
<div class="ttc" id="classSVF_1_1BranchStmt_html"><div class="ttname"><a href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00938">SVFStatements.h:938</a></div></div>
|
|
1044
1041
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4c3945abc15c6caeb9d026f47e78a340"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4c3945abc15c6caeb9d026f47e78a340">SVF::SaberCondAllocator::evaluateLoopExitBranch</a></div><div class="ttdeci">Condition evaluateLoopExitBranch(const BasicBlock *bb, const BasicBlock *succ)</div><div class="ttdoc">Evaluate loop exit branch. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00257">SaberCondAllocator.cpp:257</a></div></div>
|
|
1045
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a6bd67514e0ea9a2704ae83a38c9f2592"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a6bd67514e0ea9a2704ae83a38c9f2592">SVF::SaberCondAllocator::getICFG</a></div><div class="ttdeci">ICFG * getICFG() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
1042
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a6bd67514e0ea9a2704ae83a38c9f2592"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a6bd67514e0ea9a2704ae83a38c9f2592">SVF::SaberCondAllocator::getICFG</a></div><div class="ttdeci">ICFG * getICFG() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00206">SaberCondAllocator.h:206</a></div></div>
|
|
1046
1043
|
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00098">Z3Expr.h:98</a></div></div>
|
|
1047
1044
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad049eeed763a5f18267b9288f728b070"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad049eeed763a5f18267b9288f728b070">SVF::SaberCondAllocator::evaluateTestNullLikeExpr</a></div><div class="ttdeci">Condition evaluateTestNullLikeExpr(const BranchStmt *branchStmt, const BasicBlock *succ)</div><div class="ttdoc">Return branch condition after evaluating test null like expression. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00184">SaberCondAllocator.cpp:184</a></div></div>
|
|
1048
1045
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00099">SaberCondAllocator.h:99</a></div></div>
|
|
@@ -1090,17 +1087,17 @@ Static Private Attributes</h2></td></tr>
|
|
|
1090
1087
|
<p>if the dst dominate all other loop exit bbs, then dst can certainly be reached </p>
|
|
1091
1088
|
|
|
1092
1089
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00257">257</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1093
|
-
<div class="fragment"><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> {</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = bb->getParent();</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  assert(fun == dst->getParent() && <span class="stringliteral">"two basic blocks should be in the same function"</span>);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keyword">const</span> <a class="code" href="
|
|
1094
|
-
<div class="ttc" id="
|
|
1095
|
-
<div class="ttc" id="
|
|
1096
|
-
<div class="ttc" id="
|
|
1097
|
-
<div class="ttc" id="
|
|
1098
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7f5f1fb437153d2a797cf509b8f97c7f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">SVF::SaberCondAllocator::isBBCallsProgExit</a></div><div class="ttdeci">bool isBBCallsProgExit(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00429">SaberCondAllocator.cpp:429</a></div></div>
|
|
1090
|
+
<div class="fragment"><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> {</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = bb->getParent();</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  assert(fun == dst->getParent() && <span class="stringliteral">"two basic blocks should be in the same function"</span>);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> * svffun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(fun);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">if</span> (svffun->isLoopHeader(bb))</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>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const BasicBlock *></a> filteredbbs;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const BasicBlock*></a> exitbbs;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  svffun-><a class="code" href="classSVF_1_1SVFFunction.html#a27eb0c9d0756068da90302d420f42a2d">getExitBlocksOfLoop</a>(bb,exitbbs);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">for</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *eb : exitbbs)</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>  <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">isBBCallsProgExit</a>(eb))</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  filteredbbs.insert(eb);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordtype">bool</span> allPDT = <span class="keyword">true</span>;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &filteredbb: filteredbbs)</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f359b8e3d83bc2a92d4bc568ef62f76">postDominate</a>(dst, filteredbb))</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  allPDT = <span class="keyword">false</span>;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  }</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keywordflow">if</span> (allPDT)</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  }</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>();</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9f359b8e3d83bc2a92d4bc568ef62f76"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9f359b8e3d83bc2a92d4bc568ef62f76">SVF::SaberCondAllocator::postDominate</a></div><div class="ttdeci">bool postDominate(const BasicBlock *bbKey, const BasicBlock *bbValue) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00147">SaberCondAllocator.h:147</a></div></div>
|
|
1091
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html_a27eb0c9d0756068da90302d420f42a2d"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#a27eb0c9d0756068da90302d420f42a2d">SVF::SVFFunction::getExitBlocksOfLoop</a></div><div class="ttdeci">void getExitBlocksOfLoop(const BasicBlock *bb, Set< const BasicBlock *> &exitbbs) const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00269">BasicTypes.h:269</a></div></div>
|
|
1092
|
+
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
1093
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00115">BasicTypes.h:115</a></div></div>
|
|
1094
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7f5f1fb437153d2a797cf509b8f97c7f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">SVF::SaberCondAllocator::isBBCallsProgExit</a></div><div class="ttdeci">bool isBBCallsProgExit(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00427">SaberCondAllocator.cpp:427</a></div></div>
|
|
1099
1095
|
<div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00105">SVFBasicTypes.h:105</a></div></div>
|
|
1100
|
-
<div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
1101
|
-
<div class="ttc" id="namespaceSVF_html_abf85e29310b2e4df8925d00a5c081314"><div class="ttname"><a href="namespaceSVF.html#abf85e29310b2e4df8925d00a5c081314">SVF::Loop</a></div><div class="ttdeci">llvm::Loop Loop</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
1096
|
+
<div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00069">BasicTypes.h:69</a></div></div>
|
|
1102
1097
|
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00098">Z3Expr.h:98</a></div></div>
|
|
1098
|
+
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00070">LLVMModule.h:70</a></div></div>
|
|
1103
1099
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00099">SaberCondAllocator.h:99</a></div></div>
|
|
1100
|
+
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a547b3bc62de65b9dbfc6dee55c063dd7"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">const SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00114">LLVMModule.h:114</a></div></div>
|
|
1104
1101
|
</div><!-- fragment -->
|
|
1105
1102
|
</div>
|
|
1106
1103
|
</div>
|
|
@@ -1145,9 +1142,9 @@ Static Private Attributes</h2></td></tr>
|
|
|
1145
1142
|
<p>no branch call program exit </p>
|
|
1146
1143
|
|
|
1147
1144
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00213">213</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1148
|
-
<div class="fragment"><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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ1 = branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">getSuccessor</a>(0)-><a class="code" href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">getBB</a>();</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ2 = branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">getSuccessor</a>(1)-><a class="code" href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">getBB</a>();</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordtype">bool</span> branch1 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">isBBCallsProgExit</a>(succ1);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordtype">bool</span> branch2 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">isBBCallsProgExit</a>(succ2);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">if</span> (branch1 && !branch2)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">if</span> (succ1 == succ)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!branch1 && branch2)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">if</span> (succ2 == succ)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="comment">// two branches both call program exit</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (branch1 && branch2)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>();</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
1145
|
+
<div class="fragment"><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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ1 = branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">getSuccessor</a>(0)-><a class="code" href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">getBB</a>();</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ2 = branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">getSuccessor</a>(1)-><a class="code" href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">getBB</a>();</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> </div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordtype">bool</span> branch1 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">isBBCallsProgExit</a>(succ1);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordtype">bool</span> branch2 = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">isBBCallsProgExit</a>(succ2);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">if</span> (branch1 && !branch2)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">if</span> (succ1 == succ)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!branch1 && branch2)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">if</span> (succ2 == succ)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="comment">// two branches both call program exit</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (branch1 && branch2)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>();</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
1149
1146
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9b52da69d79746765d0c12a5ce1b08f4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">SVF::SaberCondAllocator::getFalseCond</a></div><div class="ttdeci">Condition getFalseCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00103">SaberCondAllocator.h:103</a></div></div>
|
|
1150
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7f5f1fb437153d2a797cf509b8f97c7f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">SVF::SaberCondAllocator::isBBCallsProgExit</a></div><div class="ttdeci">bool isBBCallsProgExit(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1147
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7f5f1fb437153d2a797cf509b8f97c7f"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7f5f1fb437153d2a797cf509b8f97c7f">SVF::SaberCondAllocator::isBBCallsProgExit</a></div><div class="ttdeci">bool isBBCallsProgExit(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00427">SaberCondAllocator.cpp:427</a></div></div>
|
|
1151
1148
|
<div class="ttc" id="classSVF_1_1BranchStmt_html_a7d9a6ebb2d95942c453864b5327b1ae8"><div class="ttname"><a href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">SVF::BranchStmt::getSuccessor</a></div><div class="ttdeci">const ICFGNode * getSuccessor(u32_t i) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l01007">SVFStatements.h:1007</a></div></div>
|
|
1152
1149
|
<div class="ttc" id="classSVF_1_1ICFGNode_html_ac1689701c75e04481e2ae2f4482551c4"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">SVF::ICFGNode::getBB</a></div><div class="ttdeci">virtual const BasicBlock * getBB() const</div><div class="ttdoc">Return the function of this ICFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00086">ICFGNode.h:86</a></div></div>
|
|
1153
1150
|
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00098">Z3Expr.h:98</a></div></div>
|
|
@@ -1193,7 +1190,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1193
1190
|
<p>Evaluate null like expression for source-sink related bug detection in SABER </p>
|
|
1194
1191
|
|
|
1195
1192
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00184">184</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1196
|
-
<div class="fragment"><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ1 = branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">getSuccessor</a>(0)-><a class="code" href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">getBB</a>();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a0244cfcb0f23614e8f870383a6bd44b3">isTestNullExpr</a>(branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a915384027ae53e99311f05a08edf99f0">getCondition</a>()-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()))</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">if</span> (succ1 == succ)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a8ffebb3dec9884434be8e432ab1f0063">isTestNotNullExpr</a>(branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a915384027ae53e99311f05a08edf99f0">getCondition</a>()-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()))</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">if</span> (succ1 == succ)</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
1193
|
+
<div class="fragment"><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ1 = branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">getSuccessor</a>(0)-><a class="code" href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">getBB</a>();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a0244cfcb0f23614e8f870383a6bd44b3">isTestNullExpr</a>(branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a915384027ae53e99311f05a08edf99f0">getCondition</a>()-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()))</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">if</span> (succ1 == succ)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a8ffebb3dec9884434be8e432ab1f0063">isTestNotNullExpr</a>(branchStmt-><a class="code" href="classSVF_1_1BranchStmt.html#a915384027ae53e99311f05a08edf99f0">getCondition</a>()-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()))</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="comment">// succ is then branch</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">if</span> (succ1 == succ)</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="comment">// succ is else branch</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  }</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">Condition::nullExpr</a>();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
1197
1194
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9b52da69d79746765d0c12a5ce1b08f4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">SVF::SaberCondAllocator::getFalseCond</a></div><div class="ttdeci">Condition getFalseCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00103">SaberCondAllocator.h:103</a></div></div>
|
|
1198
1195
|
<div class="ttc" id="classSVF_1_1BranchStmt_html_a7d9a6ebb2d95942c453864b5327b1ae8"><div class="ttname"><a href="classSVF_1_1BranchStmt.html#a7d9a6ebb2d95942c453864b5327b1ae8">SVF::BranchStmt::getSuccessor</a></div><div class="ttdeci">const ICFGNode * getSuccessor(u32_t i) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l01007">SVFStatements.h:1007</a></div></div>
|
|
1199
1196
|
<div class="ttc" id="classSVF_1_1ICFGNode_html_ac1689701c75e04481e2ae2f4482551c4"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#ac1689701c75e04481e2ae2f4482551c4">SVF::ICFGNode::getBB</a></div><div class="ttdeci">virtual const BasicBlock * getBB() const</div><div class="ttdoc">Return the function of this ICFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00086">ICFGNode.h:86</a></div></div>
|
|
@@ -1201,8 +1198,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1201
1198
|
<div class="ttc" id="classSVF_1_1BranchStmt_html_a915384027ae53e99311f05a08edf99f0"><div class="ttname"><a href="classSVF_1_1BranchStmt.html#a915384027ae53e99311f05a08edf99f0">SVF::BranchStmt::getCondition</a></div><div class="ttdeci">const SVFVar * getCondition() const</div><div class="ttdoc">Return the condition. </div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8cpp_source.html#l00320">SVFStatements.cpp:320</a></div></div>
|
|
1202
1199
|
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9aa800372d57db519d484cc32ea1c5dc"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9aa800372d57db519d484cc32ea1c5dc">SVF::Z3Expr::nullExpr</a></div><div class="ttdeci">static z3::expr nullExpr()</div><div class="ttdoc">null expression </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00098">Z3Expr.h:98</a></div></div>
|
|
1203
1200
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00099">SaberCondAllocator.h:99</a></div></div>
|
|
1204
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a0244cfcb0f23614e8f870383a6bd44b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a0244cfcb0f23614e8f870383a6bd44b3">SVF::SaberCondAllocator::isTestNullExpr</a></div><div class="ttdeci">bool isTestNullExpr(const Value *test) const</div><div class="ttdoc">Return true if this is a test null expression. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1205
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a8ffebb3dec9884434be8e432ab1f0063"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a8ffebb3dec9884434be8e432ab1f0063">SVF::SaberCondAllocator::isTestNotNullExpr</a></div><div class="ttdeci">bool isTestNotNullExpr(const Value *test) const</div><div class="ttdoc">Return true if this is a test not null expression. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1201
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a0244cfcb0f23614e8f870383a6bd44b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a0244cfcb0f23614e8f870383a6bd44b3">SVF::SaberCondAllocator::isTestNullExpr</a></div><div class="ttdeci">bool isTestNullExpr(const Value *test) const</div><div class="ttdoc">Return true if this is a test null expression. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00344">SaberCondAllocator.cpp:344</a></div></div>
|
|
1202
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a8ffebb3dec9884434be8e432ab1f0063"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a8ffebb3dec9884434be8e432ab1f0063">SVF::SaberCondAllocator::isTestNotNullExpr</a></div><div class="ttdeci">bool isTestNotNullExpr(const Value *test) const</div><div class="ttdoc">Return true if this is a test not null expression. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00353">SaberCondAllocator.cpp:353</a></div></div>
|
|
1206
1203
|
</div><!-- fragment -->
|
|
1207
1204
|
</div>
|
|
1208
1205
|
</div>
|
|
@@ -1234,7 +1231,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1234
1231
|
|
|
1235
1232
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00108">108</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1236
1233
|
<div class="fragment"><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a> elems;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">extractSubConds</a>(cond, elems);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">return</span> elems;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  }</div><div class="ttc" id="namespaceSVF_html_aa7b6a13e52671de8524b130738aeb564"><div class="ttname"><a href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">SVF::NodeBS</a></div><div class="ttdeci">SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00096">SVFBasicTypes.h:96</a></div></div>
|
|
1237
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9f43fe1cacf419f03276d66c3a54fe77"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">SVF::SaberCondAllocator::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const Condition &condition, NodeBS &support) const</div><div class="ttdoc">extract subexpression from a Z3 expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1234
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9f43fe1cacf419f03276d66c3a54fe77"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">SVF::SaberCondAllocator::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const Condition &condition, NodeBS &support) const</div><div class="ttdoc">extract subexpression from a Z3 expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00620">SaberCondAllocator.cpp:620</a></div></div>
|
|
1238
1235
|
</div><!-- fragment -->
|
|
1239
1236
|
</div>
|
|
1240
1237
|
</div>
|
|
@@ -1274,11 +1271,11 @@ Static Private Attributes</h2></td></tr>
|
|
|
1274
1271
|
|
|
1275
1272
|
<p>extract subexpression from a Z3 expression </p>
|
|
1276
1273
|
|
|
1277
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1278
|
-
<div class="fragment"><div class="line"><a name="
|
|
1274
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00620">620</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1275
|
+
<div class="fragment"><div class="line"><a name="l00621"></a><span class="lineno"> 621</span> {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordflow">if</span> (condition.getExpr().num_args() == 1 && <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad5d27f65374025b6a105ea7a92cbdb50">isNegCond</a>(condition.id()))</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  {</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  support.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(condition.getExpr().id());</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  }</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keywordflow">if</span> (condition.getExpr().num_args() == 0)</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">if</span> (!condition.getExpr().is_true() && !condition.getExpr().is_false())</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  support.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(condition.getExpr().id());</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i < condition.getExpr().num_args(); ++i)</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  {</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> expr = condition.<a class="code" href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">getExpr</a>().arg(i);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">extractSubConds</a>(expr, support);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> </div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
1279
1276
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad5d27f65374025b6a105ea7a92cbdb50"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad5d27f65374025b6a105ea7a92cbdb50">SVF::SaberCondAllocator::isNegCond</a></div><div class="ttdeci">bool isNegCond(u32_t id) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00142">SaberCondAllocator.h:142</a></div></div>
|
|
1280
1277
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
1281
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9f43fe1cacf419f03276d66c3a54fe77"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">SVF::SaberCondAllocator::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const Condition &condition, NodeBS &support) const</div><div class="ttdoc">extract subexpression from a Z3 expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1278
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9f43fe1cacf419f03276d66c3a54fe77"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9f43fe1cacf419f03276d66c3a54fe77">SVF::SaberCondAllocator::extractSubConds</a></div><div class="ttdeci">void extractSubConds(const Condition &condition, NodeBS &support) const</div><div class="ttdoc">extract subexpression from a Z3 expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00620">SaberCondAllocator.cpp:620</a></div></div>
|
|
1282
1279
|
<div class="ttc" id="classSVF_1_1Z3Expr_html_a57c199ba2c3c6a6d44a86e0b1429be55"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a57c199ba2c3c6a6d44a86e0b1429be55">SVF::Z3Expr::getExpr</a></div><div class="ttdeci">const z3::expr & getExpr() const</div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00079">Z3Expr.h:79</a></div></div>
|
|
1283
1280
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a61bd86909a141f9de873d92c0f904832"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">SVF::SparseBitVector::set</a></div><div class="ttdeci">void set(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00745">SparseBitVector.h:745</a></div></div>
|
|
1284
1281
|
</div><!-- fragment -->
|
|
@@ -1323,7 +1320,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1323
1320
|
|
|
1324
1321
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00140">140</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1325
1322
|
<div class="fragment"><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> pos = <a class="code" href="classSVF_1_1SymbolTableInfo.html#ab0f1d2055b650f3b6ee4406c940a0a0e">SymbolTableInfo::getBBSuccessorPos</a>(bb,succ);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SymbolTableInfo.html#ad15427845b821e3308bc4fdc45d912b9">SymbolTableInfo::getBBSuccessorNum</a>(bb) == 1)</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  BBCondMap::const_iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">bbConds</a>.find(bb);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  assert(it != <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">bbConds</a>.end() && <span class="stringliteral">"basic block does not have branch and conditions??"</span>);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  CondPosMap::const_iterator cit = it->second.find(pos);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  assert(cit != it->second.end() && <span class="stringliteral">"no condition on the branch??"</span>);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">return</span> cit->second;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div><div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
1326
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5c129ebf5ae55eb3af8bd670c921a646"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">SVF::SaberCondAllocator::bbConds</a></div><div class="ttdeci">BBCondMap bbConds</div><div class="ttdoc">a counter for fresh condition </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
1323
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5c129ebf5ae55eb3af8bd670c921a646"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">SVF::SaberCondAllocator::bbConds</a></div><div class="ttdeci">BBCondMap bbConds</div><div class="ttdoc">a counter for fresh condition </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00304">SaberCondAllocator.h:304</a></div></div>
|
|
1327
1324
|
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html_ab0f1d2055b650f3b6ee4406c940a0a0e"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ab0f1d2055b650f3b6ee4406c940a0a0e">SVF::SymbolTableInfo::getBBSuccessorPos</a></div><div class="ttdeci">static const u32_t getBBSuccessorPos(const BasicBlock *BB, const BasicBlock *Succ)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00356">SymbolTableInfo.cpp:356</a></div></div>
|
|
1328
1325
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00099">SaberCondAllocator.h:99</a></div></div>
|
|
1329
1326
|
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html_ad15427845b821e3308bc4fdc45d912b9"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ad15427845b821e3308bc4fdc45d912b9">SVF::SymbolTableInfo::getBBSuccessorNum</a></div><div class="ttdeci">static const u32_t getBBSuccessorNum(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00346">SymbolTableInfo.cpp:346</a></div></div>
|
|
@@ -1354,8 +1351,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1354
1351
|
</table>
|
|
1355
1352
|
</div><div class="memdoc">
|
|
1356
1353
|
|
|
1357
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
1358
|
-
<div class="fragment"><div class="line"><a name="
|
|
1354
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00223">223</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1355
|
+
<div class="fragment"><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  BBToCondMap::const_iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.find(bb);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span>(it==<a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.end())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">getFalseCond</a>();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a6d29487d00d66dadae7b4b79f9bf50e9"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">SVF::SaberCondAllocator::bbToCondMap</a></div><div class="ttdeci">BBToCondMap bbToCondMap</div><div class="ttdoc">map a basic block to its path condition starting from root </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00296">SaberCondAllocator.h:296</a></div></div>
|
|
1359
1356
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9b52da69d79746765d0c12a5ce1b08f4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9b52da69d79746765d0c12a5ce1b08f4">SVF::SaberCondAllocator::getFalseCond</a></div><div class="ttdeci">Condition getFalseCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00103">SaberCondAllocator.h:103</a></div></div>
|
|
1360
1357
|
</div><!-- fragment -->
|
|
1361
1358
|
</div>
|
|
@@ -1387,7 +1384,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1387
1384
|
<p>Get/Set instruction based on Z3 expression id. </p>
|
|
1388
1385
|
|
|
1389
1386
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00128">128</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1390
|
-
<div class="fragment"><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  IndexToTermInstMap::const_iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.find(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  assert(it != <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.end() && <span class="stringliteral">"this should be a fresh condition"</span>);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aee401aa2c7884888bbd26544bcd92881"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">SVF::SaberCondAllocator::idToTermInstMap</a></div><div class="ttdeci">IndexToTermInstMap idToTermInstMap</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
1387
|
+
<div class="fragment"><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  IndexToTermInstMap::const_iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.find(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  assert(it != <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.end() && <span class="stringliteral">"this should be a fresh condition"</span>);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aee401aa2c7884888bbd26544bcd92881"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">SVF::SaberCondAllocator::idToTermInstMap</a></div><div class="ttdeci">IndexToTermInstMap idToTermInstMap</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00298">SaberCondAllocator.h:298</a></div></div>
|
|
1391
1388
|
</div><!-- fragment -->
|
|
1392
1389
|
</div>
|
|
1393
1390
|
</div>
|
|
@@ -1415,7 +1412,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1415
1412
|
</div><div class="memdoc">
|
|
1416
1413
|
|
|
1417
1414
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00079">79</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1418
|
-
<div class="fragment"><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">totalCondNum</a>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a76fad4d58db94d7c572876ba6f1adf83"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">SVF::SaberCondAllocator::totalCondNum</a></div><div class="ttdeci">static u32_t totalCondNum</div><div class="ttdoc">vector storing z3expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
1415
|
+
<div class="fragment"><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">totalCondNum</a>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a76fad4d58db94d7c572876ba6f1adf83"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">SVF::SaberCondAllocator::totalCondNum</a></div><div class="ttdeci">static u32_t totalCondNum</div><div class="ttdoc">vector storing z3expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00301">SaberCondAllocator.h:301</a></div></div>
|
|
1419
1416
|
</div><!-- fragment -->
|
|
1420
1417
|
</div>
|
|
1421
1418
|
</div>
|
|
@@ -1444,8 +1441,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1444
1441
|
|
|
1445
1442
|
<p>Get current value for branch condition evaluation. </p>
|
|
1446
1443
|
|
|
1447
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
1448
|
-
<div class="fragment"><div class="line"><a name="
|
|
1444
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00185">185</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1445
|
+
<div class="fragment"><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0">curEvalSVFGNode</a>;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4ac9b5ec6bfd7a7b468cb13a5e8803e0"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0">SVF::SaberCondAllocator::curEvalSVFGNode</a></div><div class="ttdeci">const SVFGNode * curEvalSVFGNode</div><div class="ttdoc">current llvm value to evaluate branch condition when computing guards </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00297">SaberCondAllocator.h:297</a></div></div>
|
|
1449
1446
|
</div><!-- fragment -->
|
|
1450
1447
|
</div>
|
|
1451
1448
|
</div>
|
|
@@ -1487,8 +1484,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1487
1484
|
|
|
1488
1485
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00155">155</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1489
1486
|
<div class="fragment"><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>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">getCurEvalSVFGNode</a>() && <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">getCurEvalSVFGNode</a>()->getValue())</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4d334bb764e2f3feb5da892e0c21b8ed">evaluateBranchCond</a>(bb, succ);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a2b1c2e7764631d40a5b8d0ce2cc73442">getBranchCond</a>(bb, succ);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a2b1c2e7764631d40a5b8d0ce2cc73442"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a2b1c2e7764631d40a5b8d0ce2cc73442">SVF::SaberCondAllocator::getBranchCond</a></div><div class="ttdeci">Condition getBranchCond(const BasicBlock *bb, const BasicBlock *succ) const</div><div class="ttdoc">Get branch condition. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00140">SaberCondAllocator.cpp:140</a></div></div>
|
|
1490
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4d334bb764e2f3feb5da892e0c21b8ed"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4d334bb764e2f3feb5da892e0c21b8ed">SVF::SaberCondAllocator::evaluateBranchCond</a></div><div class="ttdeci">Condition evaluateBranchCond(const BasicBlock *bb, const BasicBlock *succ)</div><div class="ttdoc">Evaluate branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1491
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9aec07a64b97d546cfa0efe10f888b6a"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">SVF::SaberCondAllocator::getCurEvalSVFGNode</a></div><div class="ttdeci">const SVFGNode * getCurEvalSVFGNode() const</div><div class="ttdoc">Get current value for branch condition evaluation. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
1487
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4d334bb764e2f3feb5da892e0c21b8ed"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4d334bb764e2f3feb5da892e0c21b8ed">SVF::SaberCondAllocator::evaluateBranchCond</a></div><div class="ttdeci">Condition evaluateBranchCond(const BasicBlock *bb, const BasicBlock *succ)</div><div class="ttdoc">Evaluate branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00294">SaberCondAllocator.cpp:294</a></div></div>
|
|
1488
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9aec07a64b97d546cfa0efe10f888b6a"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">SVF::SaberCondAllocator::getCurEvalSVFGNode</a></div><div class="ttdeci">const SVFGNode * getCurEvalSVFGNode() const</div><div class="ttdoc">Get current value for branch condition evaluation. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00185">SaberCondAllocator.h:185</a></div></div>
|
|
1492
1489
|
</div><!-- fragment -->
|
|
1493
1490
|
</div>
|
|
1494
1491
|
</div>
|
|
@@ -1543,44 +1540,12 @@ Static Private Attributes</h2></td></tr>
|
|
|
1543
1540
|
</table>
|
|
1544
1541
|
</div><div class="memdoc">
|
|
1545
1542
|
|
|
1546
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
1547
|
-
<div class="fragment"><div class="line"><a name="
|
|
1543
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00206">206</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1544
|
+
<div class="fragment"><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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">PAG::getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a37cfa2aa4e7b98ef9dc8179f581a2362"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVF::SVFIR::getPAG</a></div><div class="ttdeci">static SVFIR * getPAG(bool buildFromFile=false)</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis. ...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00106">SVFIR.h:106</a></div></div>
|
|
1548
1545
|
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
|
|
1549
1546
|
</div><!-- fragment -->
|
|
1550
1547
|
</div>
|
|
1551
1548
|
</div>
|
|
1552
|
-
<a id="a44932e57515b7ddcc192796679dd69be"></a>
|
|
1553
|
-
<h2 class="memtitle"><span class="permalink"><a href="#a44932e57515b7ddcc192796679dd69be">◆ </a></span>getLoopInfo()</h2>
|
|
1554
|
-
|
|
1555
|
-
<div class="memitem">
|
|
1556
|
-
<div class="memproto">
|
|
1557
|
-
<table class="mlabels">
|
|
1558
|
-
<tr>
|
|
1559
|
-
<td class="mlabels-left">
|
|
1560
|
-
<table class="memname">
|
|
1561
|
-
<tr>
|
|
1562
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#a77e088bfe47c0b0ddcbbe0693dec6fe5">LoopInfo</a>* SVF::SaberCondAllocator::getLoopInfo </td>
|
|
1563
|
-
<td>(</td>
|
|
1564
|
-
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> * </td>
|
|
1565
|
-
<td class="paramname"><em>f</em></td><td>)</td>
|
|
1566
|
-
<td></td>
|
|
1567
|
-
</tr>
|
|
1568
|
-
</table>
|
|
1569
|
-
</td>
|
|
1570
|
-
<td class="mlabels-right">
|
|
1571
|
-
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
|
|
1572
|
-
</tr>
|
|
1573
|
-
</table>
|
|
1574
|
-
</div><div class="memdoc">
|
|
1575
|
-
|
|
1576
|
-
<p>Get LoopInfo. </p>
|
|
1577
|
-
|
|
1578
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00166">166</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1579
|
-
<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ac9a70a1f69abe85197d95945b6c4ed97">cfInfoBuilder</a>.<a class="code" href="classSVF_1_1PTACFInfoBuilder.html#a418e6009760a7c9a048d2ffd9cd29956">getLoopInfo</a>(f);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ac9a70a1f69abe85197d95945b6c4ed97"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ac9a70a1f69abe85197d95945b6c4ed97">SVF::SaberCondAllocator::cfInfoBuilder</a></div><div class="ttdeci">PTACFInfoBuilder cfInfoBuilder</div><div class="ttdoc">map a function to its loop info </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00301">SaberCondAllocator.h:301</a></div></div>
|
|
1580
|
-
<div class="ttc" id="classSVF_1_1PTACFInfoBuilder_html_a418e6009760a7c9a048d2ffd9cd29956"><div class="ttname"><a href="classSVF_1_1PTACFInfoBuilder.html#a418e6009760a7c9a048d2ffd9cd29956">SVF::PTACFInfoBuilder::getLoopInfo</a></div><div class="ttdeci">LoopInfo * getLoopInfo(const Function *f)</div><div class="ttdoc">Get loop info of a function. </div><div class="ttdef"><b>Definition:</b> <a href="DataFlowUtil_8cpp_source.html#l00075">DataFlowUtil.cpp:75</a></div></div>
|
|
1581
|
-
</div><!-- fragment -->
|
|
1582
|
-
</div>
|
|
1583
|
-
</div>
|
|
1584
1549
|
<a id="ac0060d6660cb022e599dbcb9eabc5aaa"></a>
|
|
1585
1550
|
<h2 class="memtitle"><span class="permalink"><a href="#ac0060d6660cb022e599dbcb9eabc5aaa">◆ </a></span>getMemUsage()</h2>
|
|
1586
1551
|
|
|
@@ -1655,9 +1620,9 @@ Static Private Attributes</h2></td></tr>
|
|
|
1655
1620
|
<p>Get complement phi condition e.g., B0: dstBB; B1:incomingBB; B2:complementBB Assume B0 (phi node) is the successor of both B1 and B2. If B1 dominates B2, and B0 not dominate B2 then condition from B1–>B0 = neg(B1–>B2)^(B1–>B0) </p>
|
|
1656
1621
|
<p>avoid both BB0 and BB1 dominate BB2 (e.g., while loop), then BB2 is not necessaryly a complement BB </p>
|
|
1657
1622
|
|
|
1658
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1659
|
-
<div class="fragment"><div class="line"><a name="
|
|
1660
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1623
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00449">449</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1624
|
+
<div class="fragment"><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  assert(BB1 && BB2 && <span class="stringliteral">"expect nullptr BB here!"</span>);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a6bcbb4475102221e7d71954f63d98558">dominate</a>(BB1, BB2) && ! <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6bcbb4475102221e7d71954f63d98558">dominate</a>(BB0, BB2))</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  {</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> cond = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">ComputeIntraVFGGuard</a>(BB1, BB2);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817">condNeg</a>(cond);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  }</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">getTrueCond</a>();</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
1625
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a94ef09be5ef07f4d5222059b99619bc2"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a94ef09be5ef07f4d5222059b99619bc2">SVF::SaberCondAllocator::ComputeIntraVFGGuard</a></div><div class="ttdeci">virtual Condition ComputeIntraVFGGuard(const BasicBlock *src, const BasicBlock *dst)</div><div class="ttdoc">Guard Computation for a value-flow (between two basic blocks) </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00500">SaberCondAllocator.cpp:500</a></div></div>
|
|
1661
1626
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a620d53b9af8dd30523c478f4e9655817"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a620d53b9af8dd30523c478f4e9655817">SVF::SaberCondAllocator::condNeg</a></div><div class="ttdeci">Condition condNeg(const Condition &cond)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00095">SaberCondAllocator.h:95</a></div></div>
|
|
1662
1627
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a6bcbb4475102221e7d71954f63d98558"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a6bcbb4475102221e7d71954f63d98558">SVF::SaberCondAllocator::dominate</a></div><div class="ttdeci">bool dominate(const BasicBlock *bbKey, const BasicBlock *bbValue) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00156">SaberCondAllocator.h:156</a></div></div>
|
|
1663
1628
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab9d7f1f5c5f22b190ec34255dead41b3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab9d7f1f5c5f22b190ec34255dead41b3">SVF::SaberCondAllocator::getTrueCond</a></div><div class="ttdeci">Condition getTrueCond() const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00099">SaberCondAllocator.h:99</a></div></div>
|
|
@@ -1718,8 +1683,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1718
1683
|
|
|
1719
1684
|
<p>whether condition is satisfiable for all possible boolean guards </p>
|
|
1720
1685
|
|
|
1721
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
1722
|
-
<div class="fragment"><div class="line"><a name="
|
|
1686
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00198">198</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1687
|
+
<div class="fragment"><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">isEquivalentBranchCond</a>(condition, <a class="code" href="classSVF_1_1Z3Expr.html#aaa0c9122f34208235a2d830432665752">Condition::getTrueCond</a>());</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aa9027574586fd4fbb12039f595ecec71"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">SVF::SaberCondAllocator::isEquivalentBranchCond</a></div><div class="ttdeci">bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const</div><div class="ttdoc">Whether lhs and rhs are equivalent branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00597">SaberCondAllocator.cpp:597</a></div></div>
|
|
1723
1688
|
<div class="ttc" id="classSVF_1_1Z3Expr_html_aaa0c9122f34208235a2d830432665752"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#aaa0c9122f34208235a2d830432665752">SVF::Z3Expr::getTrueCond</a></div><div class="ttdeci">static Z3Expr getTrueCond()</div><div class="ttdoc">Return the unique true condition. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00281">Z3Expr.h:281</a></div></div>
|
|
1724
1689
|
</div><!-- fragment -->
|
|
1725
1690
|
</div>
|
|
@@ -1749,10 +1714,10 @@ Static Private Attributes</h2></td></tr>
|
|
|
1749
1714
|
</div><div class="memdoc">
|
|
1750
1715
|
<p>Whether this basic block contains program exit function call </p>
|
|
1751
1716
|
|
|
1752
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1753
|
-
<div class="fragment"><div class="line"><a name="
|
|
1754
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad1620cc7482aeb464b53cfce64e17cc3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">SVF::SaberCondAllocator::funToExitBBsMap</a></div><div class="ttdeci">FunToExitBBsMap funToExitBBsMap</div><div class="ttdoc">map a function to all its basic blocks calling program exit </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
1755
|
-
<div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
1717
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00427">427</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1718
|
+
<div class="fragment"><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = bb->getParent();</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  FunToExitBBsMap::const_iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">funToExitBBsMap</a>.find(fun);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordflow">if</span> (it != <a class="code" href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">funToExitBBsMap</a>.end())</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &bit: it->second)</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SaberCondAllocator.html#a9f359b8e3d83bc2a92d4bc568ef62f76">postDominate</a>(bit, bb))</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  }</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9f359b8e3d83bc2a92d4bc568ef62f76"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9f359b8e3d83bc2a92d4bc568ef62f76">SVF::SaberCondAllocator::postDominate</a></div><div class="ttdeci">bool postDominate(const BasicBlock *bbKey, const BasicBlock *bbValue) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00147">SaberCondAllocator.h:147</a></div></div>
|
|
1719
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ad1620cc7482aeb464b53cfce64e17cc3"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ad1620cc7482aeb464b53cfce64e17cc3">SVF::SaberCondAllocator::funToExitBBsMap</a></div><div class="ttdeci">FunToExitBBsMap funToExitBBsMap</div><div class="ttdoc">map a function to all its basic blocks calling program exit </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00295">SaberCondAllocator.h:295</a></div></div>
|
|
1720
|
+
<div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00069">BasicTypes.h:69</a></div></div>
|
|
1756
1721
|
</div><!-- fragment -->
|
|
1757
1722
|
</div>
|
|
1758
1723
|
</div>
|
|
@@ -1783,8 +1748,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1783
1748
|
<p>Evaluate test null/not null like expressions. </p>
|
|
1784
1749
|
<p>Return true if the predicate of this compare instruction is equal </p>
|
|
1785
1750
|
|
|
1786
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1787
|
-
<div class="fragment"><div class="line"><a name="
|
|
1751
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00334">334</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1752
|
+
<div class="fragment"><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">return</span> (cmp->getPredicate() == CmpInst::ICMP_EQ);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> }</div></div><!-- fragment -->
|
|
1788
1753
|
</div>
|
|
1789
1754
|
</div>
|
|
1790
1755
|
<a id="aa9027574586fd4fbb12039f595ecec71"></a>
|
|
@@ -1816,8 +1781,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1816
1781
|
<p>Whether lhs and rhs are equivalent branch conditions. </p>
|
|
1817
1782
|
<p>check equal using z3 solver </p>
|
|
1818
1783
|
|
|
1819
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1820
|
-
<div class="fragment"><div class="line"><a name="
|
|
1784
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00597">597</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1785
|
+
<div class="fragment"><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().push();</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().add(lhs.getExpr() != rhs.getExpr()); </div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  z3::check_result res = <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().check();</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().pop();</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="keywordflow">return</span> res == z3::unsat;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_a16721e960145864d0835eb95f2ae4681"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">SVF::Z3Expr::getSolver</a></div><div class="ttdeci">static z3::solver & getSolver()</div><div class="ttdoc">Get z3 solver, singleton design here to make sure we only have one context. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00056">Z3Expr.cpp:56</a></div></div>
|
|
1821
1786
|
</div><!-- fragment -->
|
|
1822
1787
|
</div>
|
|
1823
1788
|
</div>
|
|
@@ -1847,8 +1812,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1847
1812
|
|
|
1848
1813
|
<p>Return true if the predicate of this compare instruction is not equal. </p>
|
|
1849
1814
|
|
|
1850
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1851
|
-
<div class="fragment"><div class="line"><a name="
|
|
1815
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00339">339</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1816
|
+
<div class="fragment"><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> (cmp->getPredicate() == CmpInst::ICMP_NE);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> }</div></div><!-- fragment -->
|
|
1852
1817
|
</div>
|
|
1853
1818
|
</div>
|
|
1854
1819
|
<a id="ad5d27f65374025b6a105ea7a92cbdb50"></a>
|
|
@@ -1876,7 +1841,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
1876
1841
|
</div><div class="memdoc">
|
|
1877
1842
|
|
|
1878
1843
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00142">142</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
1879
|
-
<div class="fragment"><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">negConds</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4267ed81d5100d49581a4216f46e660c"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">SVF::SaberCondAllocator::negConds</a></div><div class="ttdeci">NodeBS negConds</div><div class="ttdoc">key: z3 expression id, value: instruction </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
1844
|
+
<div class="fragment"><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">negConds</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">test</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4267ed81d5100d49581a4216f46e660c"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">SVF::SaberCondAllocator::negConds</a></div><div class="ttdeci">NodeBS negConds</div><div class="ttdoc">key: z3 expression id, value: instruction </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00299">SaberCondAllocator.h:299</a></div></div>
|
|
1880
1845
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a112f2ede1240c95f9fe810f2882fab80"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a112f2ede1240c95f9fe810f2882fab80">SVF::SparseBitVector::test</a></div><div class="ttdeci">bool test(unsigned Idx) const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00706">SparseBitVector.h:706</a></div></div>
|
|
1881
1846
|
</div><!-- fragment -->
|
|
1882
1847
|
</div>
|
|
@@ -1899,8 +1864,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
1899
1864
|
|
|
1900
1865
|
<p>whether condition is satisfiable </p>
|
|
1901
1866
|
|
|
1902
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1903
|
-
<div class="fragment"><div class="line"><a name="
|
|
1867
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00608">608</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1868
|
+
<div class="fragment"><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().add(condition.getExpr());</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  z3::check_result result = <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().check();</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <a class="code" href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">Condition::getSolver</a>().pop();</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">if</span> (result == z3::sat || result == z3::unknown)</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> }</div><div class="ttc" id="classSVF_1_1Z3Expr_html_a16721e960145864d0835eb95f2ae4681"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a16721e960145864d0835eb95f2ae4681">SVF::Z3Expr::getSolver</a></div><div class="ttdeci">static z3::solver & getSolver()</div><div class="ttdoc">Get z3 solver, singleton design here to make sure we only have one context. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00056">Z3Expr.cpp:56</a></div></div>
|
|
1904
1869
|
</div><!-- fragment -->
|
|
1905
1870
|
</div>
|
|
1906
1871
|
</div>
|
|
@@ -1935,10 +1900,10 @@ Static Private Attributes</h2></td></tr>
|
|
|
1935
1900
|
<li>br i1 tobool, label if.end, label if.then, !dbg !161 There is an indirect edge 1->2 with value %0 </li>
|
|
1936
1901
|
</ol>
|
|
1937
1902
|
|
|
1938
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1939
|
-
<div class="fragment"><div class="line"><a name="
|
|
1940
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9aec07a64b97d546cfa0efe10f888b6a"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">SVF::SaberCondAllocator::getCurEvalSVFGNode</a></div><div class="ttdeci">const SVFGNode * getCurEvalSVFGNode() const</div><div class="ttdoc">Get current value for branch condition evaluation. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
1941
|
-
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
1903
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00374">374</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1904
|
+
<div class="fragment"><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> {</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *op0 = cmp->getOperand(0);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *op1 = cmp->getOperand(1);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">if</span> (SVFUtil::isa<ConstantPointerNull>(op1))</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a> inDirVal;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it: <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">getCurEvalSVFGNode</a>()->getOutEdges())</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  {</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">if</span> (it->isIndirectVFGEdge())</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  inDirVal.insert(it->getDstNode()->getValue());</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>  }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordflow">return</span> inDirVal.find(op0) != inDirVal.end();</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<ConstantPointerNull>(op0))</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const Value *></a> inDirVal;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &it: <a class="code" href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">getCurEvalSVFGNode</a>()->getOutEdges())</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordflow">if</span> (it->isIndirectVFGEdge())</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  inDirVal.insert(it->getDstNode()->getValue());</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">return</span> inDirVal.find(op1) != inDirVal.end();</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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> }</div><div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00105">SVFBasicTypes.h:105</a></div></div>
|
|
1905
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a9aec07a64b97d546cfa0efe10f888b6a"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a9aec07a64b97d546cfa0efe10f888b6a">SVF::SaberCondAllocator::getCurEvalSVFGNode</a></div><div class="ttdeci">const SVFGNode * getCurEvalSVFGNode() const</div><div class="ttdoc">Get current value for branch condition evaluation. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00185">SaberCondAllocator.h:185</a></div></div>
|
|
1906
|
+
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
|
|
1942
1907
|
</div><!-- fragment -->
|
|
1943
1908
|
</div>
|
|
1944
1909
|
</div>
|
|
@@ -1968,10 +1933,10 @@ Static Private Attributes</h2></td></tr>
|
|
|
1968
1933
|
|
|
1969
1934
|
<p>Return true if this is a test not null expression. </p>
|
|
1970
1935
|
|
|
1971
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
1972
|
-
<div class="fragment"><div class="line"><a name="
|
|
1973
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab254027728c09a23cff8825b335da1c8"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab254027728c09a23cff8825b335da1c8">SVF::SaberCondAllocator::isNECmp</a></div><div class="ttdeci">bool isNECmp(const CmpInst *cmp) const</div><div class="ttdoc">Return true if the predicate of this compare instruction is not equal. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
1974
|
-
<div class="ttc" id="namespaceSVF_html_a5d875a9d726bb9f68a17efa528dec0b4"><div class="ttname"><a href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">SVF::CmpInst</a></div><div class="ttdeci">llvm::CmpInst CmpInst</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
1936
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00353">353</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1937
|
+
<div class="fragment"><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">CmpInst</a> *cmp = SVFUtil::dyn_cast<CmpInst>(test))</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  {</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">isTestContainsNullAndTheValue</a>(cmp) && <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab254027728c09a23cff8825b335da1c8">isNECmp</a>(cmp);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7a7fbd17d13c81a9b259641d6e1cc857"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">SVF::SaberCondAllocator::isTestContainsNullAndTheValue</a></div><div class="ttdeci">bool isTestContainsNullAndTheValue(const CmpInst *cmp) const</div><div class="ttdoc">Return true if two values on the predicate are what we want. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00374">SaberCondAllocator.cpp:374</a></div></div>
|
|
1938
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab254027728c09a23cff8825b335da1c8"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab254027728c09a23cff8825b335da1c8">SVF::SaberCondAllocator::isNECmp</a></div><div class="ttdeci">bool isNECmp(const CmpInst *cmp) const</div><div class="ttdoc">Return true if the predicate of this compare instruction is not equal. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00339">SaberCondAllocator.cpp:339</a></div></div>
|
|
1939
|
+
<div class="ttc" id="namespaceSVF_html_a5d875a9d726bb9f68a17efa528dec0b4"><div class="ttname"><a href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">SVF::CmpInst</a></div><div class="ttdeci">llvm::CmpInst CmpInst</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00093">BasicTypes.h:93</a></div></div>
|
|
1975
1940
|
</div><!-- fragment -->
|
|
1976
1941
|
</div>
|
|
1977
1942
|
</div>
|
|
@@ -2001,10 +1966,10 @@ Static Private Attributes</h2></td></tr>
|
|
|
2001
1966
|
|
|
2002
1967
|
<p>Return true if this is a test null expression. </p>
|
|
2003
1968
|
|
|
2004
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
2005
|
-
<div class="fragment"><div class="line"><a name="
|
|
2006
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7a7fbd17d13c81a9b259641d6e1cc857"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">SVF::SaberCondAllocator::isTestContainsNullAndTheValue</a></div><div class="ttdeci">bool isTestContainsNullAndTheValue(const CmpInst *cmp) const</div><div class="ttdoc">Return true if two values on the predicate are what we want. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
2007
|
-
<div class="ttc" id="namespaceSVF_html_a5d875a9d726bb9f68a17efa528dec0b4"><div class="ttname"><a href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">SVF::CmpInst</a></div><div class="ttdeci">llvm::CmpInst CmpInst</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#
|
|
1969
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00344">344</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1970
|
+
<div class="fragment"><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">CmpInst</a> *cmp = SVFUtil::dyn_cast<CmpInst>(test))</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">isTestContainsNullAndTheValue</a>(cmp) && <a class="code" href="classSVF_1_1SaberCondAllocator.html#a61a5b10b610d56f7585cf709eb2b2d5b">isEQCmp</a>(cmp);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a61a5b10b610d56f7585cf709eb2b2d5b"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a61a5b10b610d56f7585cf709eb2b2d5b">SVF::SaberCondAllocator::isEQCmp</a></div><div class="ttdeci">bool isEQCmp(const CmpInst *cmp) const</div><div class="ttdoc">Evaluate test null/not null like expressions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00334">SaberCondAllocator.cpp:334</a></div></div>
|
|
1971
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a7a7fbd17d13c81a9b259641d6e1cc857"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a7a7fbd17d13c81a9b259641d6e1cc857">SVF::SaberCondAllocator::isTestContainsNullAndTheValue</a></div><div class="ttdeci">bool isTestContainsNullAndTheValue(const CmpInst *cmp) const</div><div class="ttdoc">Return true if two values on the predicate are what we want. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00374">SaberCondAllocator.cpp:374</a></div></div>
|
|
1972
|
+
<div class="ttc" id="namespaceSVF_html_a5d875a9d726bb9f68a17efa528dec0b4"><div class="ttname"><a href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">SVF::CmpInst</a></div><div class="ttdeci">llvm::CmpInst CmpInst</div><div class="ttdef"><b>Definition:</b> <a href="SVF-FE_2BasicTypes_8h_source.html#l00093">BasicTypes.h:93</a></div></div>
|
|
2008
1973
|
</div><!-- fragment -->
|
|
2009
1974
|
</div>
|
|
2010
1975
|
</div>
|
|
@@ -2026,15 +1991,15 @@ Static Private Attributes</h2></td></tr>
|
|
|
2026
1991
|
|
|
2027
1992
|
<p>Allocate a new condition. </p>
|
|
2028
1993
|
|
|
2029
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
2030
|
-
<div class="fragment"><div class="line"><a name="
|
|
1994
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00584">584</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
1995
|
+
<div class="fragment"><div class="line"><a name="l00585"></a><span class="lineno"> 585</span> {</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> condCountIdx = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">totalCondNum</a>++;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> expr = <a class="code" href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">Condition::getContext</a>().bool_const((<span class="stringliteral">"c"</span> + std::to_string(condCountIdx)).c_str());</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> negCond = <a class="code" href="classSVF_1_1Z3Expr.html#a9a545e516e6dee37310ad02481a84356">Condition::NEG</a>(expr);</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4">setCondInst</a>(expr, inst);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a22b71f885c07fff3c35006337ec41ee7">setNegCondInst</a>(negCond, inst);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#afd6cf17070e3629ced1ac36b8e2b0bbb">conditionVec</a>.push_back(expr);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#afd6cf17070e3629ced1ac36b8e2b0bbb">conditionVec</a>.push_back(negCond);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">return</span> expr;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a76fad4d58db94d7c572876ba6f1adf83"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a76fad4d58db94d7c572876ba6f1adf83">SVF::SaberCondAllocator::totalCondNum</a></div><div class="ttdeci">static u32_t totalCondNum</div><div class="ttdoc">vector storing z3expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00301">SaberCondAllocator.h:301</a></div></div>
|
|
2031
1996
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
2032
1997
|
<div class="ttc" id="classSVF_1_1Z3Expr_html_a9a545e516e6dee37310ad02481a84356"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#a9a545e516e6dee37310ad02481a84356">SVF::Z3Expr::NEG</a></div><div class="ttdeci">static Z3Expr NEG(const Z3Expr &z3Expr)</div><div class="ttdoc">compute NEG </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8h_source.html#l00294">Z3Expr.h:294</a></div></div>
|
|
2033
1998
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
2034
1999
|
<div class="ttc" id="classSVF_1_1Z3Expr_html_acfdff582a0188678c10939165a40df30"><div class="ttname"><a href="classSVF_1_1Z3Expr.html#acfdff582a0188678c10939165a40df30">SVF::Z3Expr::getContext</a></div><div class="ttdeci">static z3::context & getContext()</div><div class="ttdoc">Get z3 context, singleton design here to make sure we only have one context. </div><div class="ttdef"><b>Definition:</b> <a href="Z3Expr_8cpp_source.html#l00066">Z3Expr.cpp:66</a></div></div>
|
|
2035
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_afd6cf17070e3629ced1ac36b8e2b0bbb"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#afd6cf17070e3629ced1ac36b8e2b0bbb">SVF::SaberCondAllocator::conditionVec</a></div><div class="ttdeci">std::vector< Condition > conditionVec</div><div class="ttdoc">bit vector for distinguish neg </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
2000
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_afd6cf17070e3629ced1ac36b8e2b0bbb"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#afd6cf17070e3629ced1ac36b8e2b0bbb">SVF::SaberCondAllocator::conditionVec</a></div><div class="ttdeci">std::vector< Condition > conditionVec</div><div class="ttdoc">bit vector for distinguish neg </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00300">SaberCondAllocator.h:300</a></div></div>
|
|
2036
2001
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ae7ba47d494686df48a2a7e86b1f386b4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4">SVF::SaberCondAllocator::setCondInst</a></div><div class="ttdeci">void setCondInst(const Condition &condition, const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00135">SaberCondAllocator.h:135</a></div></div>
|
|
2037
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a22b71f885c07fff3c35006337ec41ee7"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a22b71f885c07fff3c35006337ec41ee7">SVF::SaberCondAllocator::setNegCondInst</a></div><div class="ttdeci">void setNegCondInst(const Condition &condition, const Instruction *inst)</div><div class="ttdoc">mark neg Z3 expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
2002
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a22b71f885c07fff3c35006337ec41ee7"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a22b71f885c07fff3c35006337ec41ee7">SVF::SaberCondAllocator::setNegCondInst</a></div><div class="ttdeci">void setNegCondInst(const Condition &condition, const Instruction *inst)</div><div class="ttdoc">mark neg Z3 expression </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00236">SaberCondAllocator.h:236</a></div></div>
|
|
2038
2003
|
</div><!-- fragment -->
|
|
2039
2004
|
</div>
|
|
2040
2005
|
</div>
|
|
@@ -2096,11 +2061,11 @@ Static Private Attributes</h2></td></tr>
|
|
|
2096
2061
|
<p>Print out the path condition information. </p>
|
|
2097
2062
|
<p>Print path conditions </p>
|
|
2098
2063
|
|
|
2099
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#
|
|
2100
|
-
<div class="fragment"><div class="line"><a name="
|
|
2064
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00557">557</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
2065
|
+
<div class="fragment"><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> {</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span> </div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"print path condition\n"</span>;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &bbCond: <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">bbConds</a>)</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *bb = bbCond.first;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &cit: bbCond.second)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succ: successors(bb))</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">if</span> (i == cit.first)</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">Condition</a> cond = cit.second;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << bb->getName().str() << <span class="stringliteral">"-->"</span> << succ->getName().str() << <span class="stringliteral">":"</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="classSVF_1_1SaberCondAllocator.html#a100c1962eac6d7af420defc827a025ed">dumpCond</a>(cond) << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  i++;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  }</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  }</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> }</div><div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00070">BasicTypes.h:70</a></div></div>
|
|
2101
2066
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ab4eba98cf7306c89e40975c766d5bf65"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ab4eba98cf7306c89e40975c766d5bf65">SVF::SaberCondAllocator::Condition</a></div><div class="ttdeci">Z3Expr Condition</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00052">SaberCondAllocator.h:52</a></div></div>
|
|
2102
2067
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
2103
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5c129ebf5ae55eb3af8bd670c921a646"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">SVF::SaberCondAllocator::bbConds</a></div><div class="ttdeci">BBCondMap bbConds</div><div class="ttdoc">a counter for fresh condition </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
2068
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5c129ebf5ae55eb3af8bd670c921a646"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">SVF::SaberCondAllocator::bbConds</a></div><div class="ttdeci">BBCondMap bbConds</div><div class="ttdoc">a counter for fresh condition </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00304">SaberCondAllocator.h:304</a></div></div>
|
|
2104
2069
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
2105
2070
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a100c1962eac6d7af420defc827a025ed"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a100c1962eac6d7af420defc827a025ed">SVF::SaberCondAllocator::dumpCond</a></div><div class="ttdeci">std::string dumpCond(const Condition &cond) const</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00115">SaberCondAllocator.h:115</a></div></div>
|
|
2106
2071
|
</div><!-- fragment -->
|
|
@@ -2155,7 +2120,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2155
2120
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8cpp_source.html#l00166">166</a> of file <a class="el" href="SaberCondAllocator_8cpp_source.html">SaberCondAllocator.cpp</a>.</p>
|
|
2156
2121
|
<div class="fragment"><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  assert(<a class="code" href="classSVF_1_1SymbolTableInfo.html#ad15427845b821e3308bc4fdc45d912b9">SymbolTableInfo::getBBSuccessorNum</a>(bb) > 1 && <span class="stringliteral">"not more than one successor??"</span>);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> pos = <a class="code" href="classSVF_1_1SymbolTableInfo.html#ab0f1d2055b650f3b6ee4406c940a0a0e">SymbolTableInfo::getBBSuccessorPos</a>(bb,succ);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#aa330cc6a1a3c38601ebeb325ffd87221">CondPosMap</a>& condPosMap = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">bbConds</a>[bb];</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="comment">//assert(condPosMap.find(pos) == condPosMap.end() && "this branch has already been set ");</span></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>  condPosMap[pos] = cond;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aa330cc6a1a3c38601ebeb325ffd87221"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aa330cc6a1a3c38601ebeb325ffd87221">SVF::SaberCondAllocator::CondPosMap</a></div><div class="ttdeci">Map< u32_t, Condition > CondPosMap</div><div class="ttdoc">id to instruction map for z3 </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00054">SaberCondAllocator.h:54</a></div></div>
|
|
2157
2122
|
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
2158
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5c129ebf5ae55eb3af8bd670c921a646"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">SVF::SaberCondAllocator::bbConds</a></div><div class="ttdeci">BBCondMap bbConds</div><div class="ttdoc">a counter for fresh condition </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
2123
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a5c129ebf5ae55eb3af8bd670c921a646"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a5c129ebf5ae55eb3af8bd670c921a646">SVF::SaberCondAllocator::bbConds</a></div><div class="ttdeci">BBCondMap bbConds</div><div class="ttdoc">a counter for fresh condition </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00304">SaberCondAllocator.h:304</a></div></div>
|
|
2159
2124
|
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html_ab0f1d2055b650f3b6ee4406c940a0a0e"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ab0f1d2055b650f3b6ee4406c940a0a0e">SVF::SymbolTableInfo::getBBSuccessorPos</a></div><div class="ttdeci">static const u32_t getBBSuccessorPos(const BasicBlock *BB, const BasicBlock *Succ)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00356">SymbolTableInfo.cpp:356</a></div></div>
|
|
2160
2125
|
<div class="ttc" id="classSVF_1_1SymbolTableInfo_html_ad15427845b821e3308bc4fdc45d912b9"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#ad15427845b821e3308bc4fdc45d912b9">SVF::SymbolTableInfo::getBBSuccessorNum</a></div><div class="ttdeci">static const u32_t getBBSuccessorNum(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00346">SymbolTableInfo.cpp:346</a></div></div>
|
|
2161
2126
|
</div><!-- fragment -->
|
|
@@ -2197,9 +2162,9 @@ Static Private Attributes</h2></td></tr>
|
|
|
2197
2162
|
|
|
2198
2163
|
<p>Get/Set control-flow conditions. </p>
|
|
2199
2164
|
|
|
2200
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2201
|
-
<div class="fragment"><div class="line"><a name="
|
|
2202
|
-
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aa9027574586fd4fbb12039f595ecec71"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">SVF::SaberCondAllocator::isEquivalentBranchCond</a></div><div class="ttdeci">bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const</div><div class="ttdoc">Whether lhs and rhs are equivalent branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#
|
|
2165
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00213">213</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2166
|
+
<div class="fragment"><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>  BBToCondMap::iterator it = <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.find(bb);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="comment">// until a fixed-point is reached (condition is not changed)</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>.end() && <a class="code" href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">isEquivalentBranchCond</a>(it->second, cond))</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</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>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">bbToCondMap</a>[bb] = cond;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a6d29487d00d66dadae7b4b79f9bf50e9"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a6d29487d00d66dadae7b4b79f9bf50e9">SVF::SaberCondAllocator::bbToCondMap</a></div><div class="ttdeci">BBToCondMap bbToCondMap</div><div class="ttdoc">map a basic block to its path condition starting from root </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00296">SaberCondAllocator.h:296</a></div></div>
|
|
2167
|
+
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aa9027574586fd4fbb12039f595ecec71"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aa9027574586fd4fbb12039f595ecec71">SVF::SaberCondAllocator::isEquivalentBranchCond</a></div><div class="ttdeci">bool isEquivalentBranchCond(const Condition &lhs, const Condition &rhs) const</div><div class="ttdoc">Whether lhs and rhs are equivalent branch conditions. </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8cpp_source.html#l00597">SaberCondAllocator.cpp:597</a></div></div>
|
|
2203
2168
|
</div><!-- fragment -->
|
|
2204
2169
|
</div>
|
|
2205
2170
|
</div>
|
|
@@ -2238,7 +2203,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2238
2203
|
</div><div class="memdoc">
|
|
2239
2204
|
|
|
2240
2205
|
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00135">135</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2241
|
-
<div class="fragment"><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  assert(<a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.find(condition.id()) == <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.end() && <span class="stringliteral">"this should be a fresh condition"</span>);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>[condition.id()] = inst;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aee401aa2c7884888bbd26544bcd92881"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">SVF::SaberCondAllocator::idToTermInstMap</a></div><div class="ttdeci">IndexToTermInstMap idToTermInstMap</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#
|
|
2206
|
+
<div class="fragment"><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  assert(<a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.find(condition.id()) == <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>.end() && <span class="stringliteral">"this should be a fresh condition"</span>);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">idToTermInstMap</a>[condition.id()] = inst;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_aee401aa2c7884888bbd26544bcd92881"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#aee401aa2c7884888bbd26544bcd92881">SVF::SaberCondAllocator::idToTermInstMap</a></div><div class="ttdeci">IndexToTermInstMap idToTermInstMap</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00298">SaberCondAllocator.h:298</a></div></div>
|
|
2242
2207
|
</div><!-- fragment -->
|
|
2243
2208
|
</div>
|
|
2244
2209
|
</div>
|
|
@@ -2268,8 +2233,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
2268
2233
|
|
|
2269
2234
|
<p>Set current value for branch condition evaluation. </p>
|
|
2270
2235
|
|
|
2271
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2272
|
-
<div class="fragment"><div class="line"><a name="
|
|
2236
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00180">180</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2237
|
+
<div class="fragment"><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0">curEvalSVFGNode</a> = node;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4ac9b5ec6bfd7a7b468cb13a5e8803e0"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4ac9b5ec6bfd7a7b468cb13a5e8803e0">SVF::SaberCondAllocator::curEvalSVFGNode</a></div><div class="ttdeci">const SVFGNode * curEvalSVFGNode</div><div class="ttdoc">current llvm value to evaluate branch condition when computing guards </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00297">SaberCondAllocator.h:297</a></div></div>
|
|
2273
2238
|
</div><!-- fragment -->
|
|
2274
2239
|
</div>
|
|
2275
2240
|
</div>
|
|
@@ -2309,8 +2274,8 @@ Static Private Attributes</h2></td></tr>
|
|
|
2309
2274
|
|
|
2310
2275
|
<p>mark neg Z3 expression </p>
|
|
2311
2276
|
|
|
2312
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2313
|
-
<div class="fragment"><div class="line"><a name="
|
|
2277
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00236">236</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2278
|
+
<div class="fragment"><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>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4">setCondInst</a>(condition, inst);</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <a class="code" href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">negConds</a>.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(condition.id());</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="ttc" id="classSVF_1_1SaberCondAllocator_html_a4267ed81d5100d49581a4216f46e660c"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#a4267ed81d5100d49581a4216f46e660c">SVF::SaberCondAllocator::negConds</a></div><div class="ttdeci">NodeBS negConds</div><div class="ttdoc">key: z3 expression id, value: instruction </div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00299">SaberCondAllocator.h:299</a></div></div>
|
|
2314
2279
|
<div class="ttc" id="classSVF_1_1SaberCondAllocator_html_ae7ba47d494686df48a2a7e86b1f386b4"><div class="ttname"><a href="classSVF_1_1SaberCondAllocator.html#ae7ba47d494686df48a2a7e86b1f386b4">SVF::SaberCondAllocator::setCondInst</a></div><div class="ttdeci">void setCondInst(const Condition &condition, const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="SaberCondAllocator_8h_source.html#l00135">SaberCondAllocator.h:135</a></div></div>
|
|
2315
2280
|
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a61bd86909a141f9de873d92c0f904832"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">SVF::SparseBitVector::set</a></div><div class="ttdeci">void set(unsigned Idx)</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00745">SparseBitVector.h:745</a></div></div>
|
|
2316
2281
|
</div><!-- fragment -->
|
|
@@ -2340,7 +2305,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2340
2305
|
<p>a counter for fresh condition </p>
|
|
2341
2306
|
<p>map basic block to its successors/predecessors branch conditions </p>
|
|
2342
2307
|
|
|
2343
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2308
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00304">304</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2344
2309
|
|
|
2345
2310
|
</div>
|
|
2346
2311
|
</div>
|
|
@@ -2366,7 +2331,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2366
2331
|
|
|
2367
2332
|
<p>map a basic block to its path condition starting from root </p>
|
|
2368
2333
|
|
|
2369
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2334
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00296">296</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2370
2335
|
|
|
2371
2336
|
</div>
|
|
2372
2337
|
</div>
|
|
@@ -2392,7 +2357,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2392
2357
|
|
|
2393
2358
|
<p>map a function to its loop info </p>
|
|
2394
2359
|
|
|
2395
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2360
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00294">294</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2396
2361
|
|
|
2397
2362
|
</div>
|
|
2398
2363
|
</div>
|
|
@@ -2418,7 +2383,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2418
2383
|
|
|
2419
2384
|
<p>bit vector for distinguish neg </p>
|
|
2420
2385
|
|
|
2421
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2386
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00300">300</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2422
2387
|
|
|
2423
2388
|
</div>
|
|
2424
2389
|
</div>
|
|
@@ -2444,7 +2409,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2444
2409
|
|
|
2445
2410
|
<p>current llvm value to evaluate branch condition when computing guards </p>
|
|
2446
2411
|
|
|
2447
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2412
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00297">297</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2448
2413
|
|
|
2449
2414
|
</div>
|
|
2450
2415
|
</div>
|
|
@@ -2470,7 +2435,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2470
2435
|
|
|
2471
2436
|
<p>map a function to all its basic blocks calling program exit </p>
|
|
2472
2437
|
|
|
2473
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2438
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00295">295</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2474
2439
|
|
|
2475
2440
|
</div>
|
|
2476
2441
|
</div>
|
|
@@ -2494,7 +2459,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2494
2459
|
</table>
|
|
2495
2460
|
</div><div class="memdoc">
|
|
2496
2461
|
|
|
2497
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2462
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00298">298</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2498
2463
|
|
|
2499
2464
|
</div>
|
|
2500
2465
|
</div>
|
|
@@ -2520,7 +2485,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2520
2485
|
|
|
2521
2486
|
<p>key: z3 expression id, value: instruction </p>
|
|
2522
2487
|
|
|
2523
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2488
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00299">299</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2524
2489
|
|
|
2525
2490
|
</div>
|
|
2526
2491
|
</div>
|
|
@@ -2546,7 +2511,7 @@ Static Private Attributes</h2></td></tr>
|
|
|
2546
2511
|
|
|
2547
2512
|
<p>vector storing z3expression </p>
|
|
2548
2513
|
|
|
2549
|
-
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#
|
|
2514
|
+
<p class="definition">Definition at line <a class="el" href="SaberCondAllocator_8h_source.html#l00301">301</a> of file <a class="el" href="SaberCondAllocator_8h_source.html">SaberCondAllocator.h</a>.</p>
|
|
2550
2515
|
|
|
2551
2516
|
</div>
|
|
2552
2517
|
</div>
|