Esempio n. 1
0
 public override (CopyAnalysisData output, bool isFeasibleBranch) FlowBranch(
     BasicBlock fromBlock,
     BranchWithInfo branch,
     CopyAnalysisData input)
 {
     AssertValidCopyAnalysisData(input);
     (CopyAnalysisData output, bool isFeasibleBranch)result = base.FlowBranch(fromBlock, branch, input);
     AssertValidCopyAnalysisData(result.output);
     return(result);
 }
Esempio n. 2
0
        public sealed override (GlobalFlowStateAnalysisData output, bool isFeasibleBranch) FlowBranch(BasicBlock fromBlock, BranchWithInfo branch, GlobalFlowStateAnalysisData input)
        {
            var result = base.FlowBranch(fromBlock, branch, input);

            if (HasPredicatedGlobalState &&
                branch.ControlFlowConditionKind != ControlFlowConditionKind.None &&
                branch.BranchValue != null &&
                result.isFeasibleBranch)
            {
                var branchValue = GetCachedAbstractValue(branch.BranchValue);
                var negate      = branch.ControlFlowConditionKind == ControlFlowConditionKind.WhenFalse;
                MergeAndSetGlobalState(branchValue, negate);
            }

            return(result);
        }
            public override (FlightEnabledAnalysisData output, bool isFeasibleBranch) FlowBranch(BasicBlock fromBlock, BranchWithInfo branch, FlightEnabledAnalysisData input)
            {
                var result = base.FlowBranch(fromBlock, branch, input);

                if (branch.ControlFlowConditionKind != ControlFlowConditionKind.None &&
                    branch.BranchValueOpt != null &&
                    result.isFeasibleBranch)
                {
                    var branchValue = GetCachedAbstractValue(branch.BranchValueOpt);
                    var negate      = branch.ControlFlowConditionKind == ControlFlowConditionKind.WhenFalse;
                    EnableFlightsGlobally(branchValue, negate);
                }

                return(result);
            }