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); }
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); }