65 instantiations of BasicBlockBuilder
Microsoft.CodeAnalysis (65)
Operations\ControlFlowGraphBuilder.cs (65)
30private readonly BasicBlockBuilder _entry = new BasicBlockBuilder(BasicBlockKind.Entry); 31private readonly BasicBlockBuilder _exit = new BasicBlockBuilder(BasicBlockKind.Exit); 1263AppendNewBlock(new BasicBlockBuilder(BasicBlockKind.Block)); 1346AppendNewBlock(new BasicBlockBuilder(BasicBlockKind.Block)); 1563var afterIf = new BasicBlockBuilder(BasicBlockKind.Block); 1615var afterIf = new BasicBlockBuilder(BasicBlockKind.Block); 2351var done = new BasicBlockBuilder(BasicBlockKind.Block); 2352var checkRight = new BasicBlockBuilder(BasicBlockKind.Block); 2353var resultIsLeft = new BasicBlockBuilder(BasicBlockKind.Block); 2420var done = new BasicBlockBuilder(BasicBlockKind.Block); 2421var checkRight = new BasicBlockBuilder(BasicBlockKind.Block); 2483var done = new BasicBlockBuilder(BasicBlockKind.Block); 2484var doBitWise = new BasicBlockBuilder(BasicBlockKind.Block); 2580var done = new BasicBlockBuilder(BasicBlockKind.Block); 2581var doBitWise = new BasicBlockBuilder(BasicBlockKind.Block); 2689var labEnd = new BasicBlockBuilder(BasicBlockKind.Block); 2795dest ??= new BasicBlockBuilder(BasicBlockKind.Block); 2816BasicBlockBuilder? fallThrough = new BasicBlockBuilder(BasicBlockKind.Block); 2880var afterIf = new BasicBlockBuilder(BasicBlockKind.Block); 2899var whenNull = new BasicBlockBuilder(BasicBlockKind.Block); 2905dest ??= new BasicBlockBuilder(BasicBlockKind.Block); 2909var afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block); 2933dest ??= new BasicBlockBuilder(BasicBlockKind.Block); 2943dest ??= new BasicBlockBuilder(BasicBlockKind.Block); 3053var whenNull = new BasicBlockBuilder(BasicBlockKind.Block); 3057var afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block); 3126var whenNull = new BasicBlockBuilder(BasicBlockKind.Block); 3127var afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block); 3380var whenNull = new BasicBlockBuilder(BasicBlockKind.Block); 3449var afterAccess = new BasicBlockBuilder(BasicBlockKind.Block); 3623var start = new BasicBlockBuilder(BasicBlockKind.Block); 3695var catchBlock = new BasicBlockBuilder(BasicBlockKind.Block); 3708var continueDispatchBlock = new BasicBlockBuilder(BasicBlockKind.Block); 3768AppendNewBlock(new BasicBlockBuilder(BasicBlockKind.Block)); 3770var continueDispatchBlock = new BasicBlockBuilder(BasicBlockKind.Block); 3872labeled = new BasicBlockBuilder(BasicBlockKind.Block); 3882return new BasicBlockBuilder(BasicBlockKind.Block); 3896labeledBlock = new BasicBlockBuilder(BasicBlockKind.Block); 3926AppendNewBlock(new BasicBlockBuilder(BasicBlockKind.Block), linkToPrevious: false); 4087var afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block); 4119var endOfFinally = new BasicBlockBuilder(BasicBlockKind.Block); 4124AppendNewBlock(new BasicBlockBuilder(BasicBlockKind.Block)); 4359var afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block); 4401var endOfFinally = new BasicBlockBuilder(BasicBlockKind.Block); 4405AppendNewBlock(new BasicBlockBuilder(BasicBlockKind.Block)); 4532var afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block); 4747BasicBlockBuilder checkConditionBlock = new BasicBlockBuilder(BasicBlockKind.Block); 4748BasicBlockBuilder bodyBlock = new BasicBlockBuilder(BasicBlockKind.Block); 4940var afterPositiveCheck = new BasicBlockBuilder(BasicBlockKind.Block); 4944var whenNotNull = new BasicBlockBuilder(BasicBlockKind.Block); 5051var notPositive = new BasicBlockBuilder(BasicBlockKind.Block); 5169var whenBothNotNull = new BasicBlockBuilder(BasicBlockKind.Block); 5190var notPositive = new BasicBlockBuilder(BasicBlockKind.Block); 5320BasicBlockBuilder afterIncrement = new BasicBlockBuilder(BasicBlockKind.Block); 5332BasicBlockBuilder whenNotNull = new BasicBlockBuilder(BasicBlockKind.Block); 5508var body = new BasicBlockBuilder(BasicBlockKind.Block); 5509var nextSection = new BasicBlockBuilder(BasicBlockKind.Block); 5524var nextCase = new BasicBlockBuilder(BasicBlockKind.Block); 5619AppendNewBlock(new BasicBlockBuilder(BasicBlockKind.Block)); 5706AppendNewBlock(new BasicBlockBuilder(BasicBlockKind.Block), linkToPrevious: false); 5750var start = new BasicBlockBuilder(BasicBlockKind.Block); 5832afterInitialization = new BasicBlockBuilder(BasicBlockKind.Block); 6825resultBlock = new BasicBlockBuilder(BasicBlockKind.Block); 7775var afterSwitch = new BasicBlockBuilder(BasicBlockKind.Block); 7782var afterArm = new BasicBlockBuilder(BasicBlockKind.Block);
183 references to BasicBlockBuilder
Microsoft.CodeAnalysis (183)
Operations\ControlFlowGraphBuilder.BasicBlockBuilder.cs (13)
23private BasicBlockBuilder? _predecessor1; 24private BasicBlockBuilder? _predecessor2; 25private PooledHashSet<BasicBlockBuilder>? _predecessors; 61public void MoveStatementsFrom(BasicBlockBuilder other) 121public BasicBlockBuilder? GetSingletonPredecessorOrDefault() 143public void AddPredecessor(BasicBlockBuilder predecessor) 171_predecessors = PooledHashSet<BasicBlockBuilder>.GetInstance(); 181public void RemovePredecessor(BasicBlockBuilder predecessor) 201public void GetPredecessors(ArrayBuilder<BasicBlockBuilder> builder) 208foreach (BasicBlockBuilder predecessor in _predecessors) 245foreach (BasicBlockBuilder predecessorBlockBuilder in _predecessors) 289void addBranches(BasicBlockBuilder predecessorBlockBuilder) 319public BasicBlockBuilder? Destination { get; set; }
Operations\ControlFlowGraphBuilder.ConditionalAccessOperationTracker.cs (2)
26public readonly BasicBlockBuilder? WhenNull; 28public ConditionalAccessOperationTracker(ArrayBuilder<IOperation> operations, BasicBlockBuilder whenNull)
Operations\ControlFlowGraphBuilder.cs (163)
30private readonly BasicBlockBuilder _entry = new BasicBlockBuilder(BasicBlockKind.Entry); 31private readonly BasicBlockBuilder _exit = new BasicBlockBuilder(BasicBlockKind.Exit); 33private readonly ArrayBuilder<BasicBlockBuilder> _blocks; 34private readonly PooledDictionary<BasicBlockBuilder, RegionBuilder> _regionMap; 35private BasicBlockBuilder? _currentBasicBlock; 37private PooledDictionary<ILabelSymbol, BasicBlockBuilder>? _labeledBlocks; 63private ControlFlowGraphBuilder(Compilation compilation, CaptureIdDispenser? captureIdDispenser, ArrayBuilder<BasicBlockBuilder> blocks) 69_regionMap = PooledDictionary<BasicBlockBuilder, RegionBuilder>.GetInstance(); 113var blocks = ArrayBuilder<BasicBlockBuilder>.GetInstance(); 172private static ImmutableArray<BasicBlock> ToImmutableBlocks(ArrayBuilder<BasicBlockBuilder> blockBuilders) 177foreach (BasicBlockBuilder blockBuilder in blockBuilders) 184foreach (BasicBlockBuilder blockBuilder in blockBuilders) 192foreach (BasicBlockBuilder blockBuilder in blockBuilders) 199ControlFlowBranch? getFallThroughSuccessor(BasicBlockBuilder blockBuilder) 206ControlFlowBranch? getConditionalSuccessor(BasicBlockBuilder blockBuilder) 213ControlFlowBranch getBranch(in BasicBlockBuilder.Branch branch, BasicBlockBuilder source, bool isConditionalSuccessor) 223private static void MarkReachableBlocks(ArrayBuilder<BasicBlockBuilder> blocks) 240ArrayBuilder<BasicBlockBuilder> blocks, 243ArrayBuilder<BasicBlockBuilder>? outOfRangeBlocksToVisit, 249var toVisit = ArrayBuilder<BasicBlockBuilder>.GetInstance(); 256BasicBlockBuilder current = toVisit.Pop(); 292BasicBlockBuilder.Branch branch = current.FallThrough; 313void followBranch(BasicBlockBuilder current, in BasicBlockBuilder.Branch branch) 344bool stepThroughFinally(ControlFlowRegion region, BasicBlockBuilder destination) 476BasicBlockBuilder entryBlock = blocks[@catch.FirstBlockOrdinal]; 494private static void Pack(ArrayBuilder<BasicBlockBuilder> blocks, RegionBuilder root, PooledDictionary<BasicBlockBuilder, RegionBuilder> regionMap) 511private static bool PackRegions(RegionBuilder root, ArrayBuilder<BasicBlockBuilder> blocks, PooledDictionary<BasicBlockBuilder, RegionBuilder> regionMap) 577BasicBlockBuilder block = subRegion.FirstBlock; 614private static void MergeSubRegionAndFree(RegionBuilder subRegion, ArrayBuilder<BasicBlockBuilder> blocks, PooledDictionary<BasicBlockBuilder, RegionBuilder> regionMap, bool canHaveEmptyRegion = false) 670private static bool PackBlocks(ArrayBuilder<BasicBlockBuilder> blocks, PooledDictionary<BasicBlockBuilder, RegionBuilder> regionMap) 675ArrayBuilder<BasicBlockBuilder>? predecessorsBuilder = null; 690BasicBlockBuilder block = blocks[i]; 696BasicBlockBuilder? predecessor = block.GetSingletonPredecessorOrDefault(); 716ref BasicBlockBuilder.Branch next = ref block.FallThrough; 803BasicBlockBuilder? predecessor = block.GetSingletonPredecessorOrDefault(); 869BasicBlockBuilder? predecessor = block.GetSingletonPredecessorOrDefault(); 893predecessorsBuilder = ArrayBuilder<BasicBlockBuilder>.GetInstance(); 915foreach (BasicBlockBuilder predecessor in predecessorsBuilder) 956BasicBlockBuilder? predecessor = block.GetSingletonPredecessorOrDefault(); 986BasicBlockBuilder? destination = block.Conditional.Destination; 1014RegionBuilder? tryGetImplicitEntryRegion(BasicBlockBuilder block, [DisallowNull] RegionBuilder? currentRegion) 1038void removeBlock(BasicBlockBuilder block, RegionBuilder region) 1048BasicBlockBuilder newFirst = blocks[block.Ordinal + 1]; 1061BasicBlockBuilder newLast = blocks[block.Ordinal - 1]; 1082bool tryMergeBranch(BasicBlockBuilder predecessor, ref BasicBlockBuilder.Branch predecessorBranch, BasicBlockBuilder successor) 1093void mergeBranch(BasicBlockBuilder predecessor, ref BasicBlockBuilder.Branch predecessorBranch, ref BasicBlockBuilder.Branch successorBranch) 1101bool checkBranchesFromPredecessors(ArrayBuilder<BasicBlockBuilder> predecessors, RegionBuilder currentRegion, RegionBuilder? destinationRegionOpt) 1103foreach (BasicBlockBuilder predecessor in predecessors) 1186private static void CheckUnresolvedBranches(ArrayBuilder<BasicBlockBuilder> blocks, PooledDictionary<ILabelSymbol, BasicBlockBuilder>? labeledBlocks) 1193PooledHashSet<BasicBlockBuilder>? unresolved = null; 1194foreach (BasicBlockBuilder labeled in labeledBlocks.Values) 1200unresolved = PooledHashSet<BasicBlockBuilder>.GetInstance(); 1213foreach (BasicBlockBuilder block in blocks) 1222void fixupBranch(ref BasicBlockBuilder.Branch branch) 1257private BasicBlockBuilder CurrentBasicBlock 1296private void AppendNewBlock(BasicBlockBuilder block, bool linkToPrevious = true) 1303BasicBlockBuilder prevBlock = _blocks.Last(); 1369private static void LinkBlocks(BasicBlockBuilder prevBlock, BasicBlockBuilder nextBlock, ControlFlowBranchSemantics branchKind = ControlFlowBranchSemantics.Regular) 1378private void UnconditionalBranch(BasicBlockBuilder nextBlock) 1563var afterIf = new BasicBlockBuilder(BasicBlockKind.Block); 1567BasicBlockBuilder? whenFalse = null; 1612BasicBlockBuilder? whenFalse = null; 1615var afterIf = new BasicBlockBuilder(BasicBlockKind.Block); 2288BasicBlockBuilder? fallToTrueOpt, BasicBlockBuilder? fallToFalseOpt) 2351var done = new BasicBlockBuilder(BasicBlockKind.Block); 2352var checkRight = new BasicBlockBuilder(BasicBlockKind.Block); 2353var resultIsLeft = new BasicBlockBuilder(BasicBlockKind.Block); 2420var done = new BasicBlockBuilder(BasicBlockKind.Block); 2421var checkRight = new BasicBlockBuilder(BasicBlockKind.Block); 2483var done = new BasicBlockBuilder(BasicBlockKind.Block); 2484var doBitWise = new BasicBlockBuilder(BasicBlockKind.Block); 2580var done = new BasicBlockBuilder(BasicBlockKind.Block); 2581var doBitWise = new BasicBlockBuilder(BasicBlockKind.Block); 2654int? captureIdForResult, BasicBlockBuilder? fallToTrueOpt, BasicBlockBuilder? fallToFalseOpt) 2673ref BasicBlockBuilder? lazyFallThrough = ref stopValue ? ref fallToTrueOpt : ref fallToFalseOpt; 2689var labEnd = new BasicBlockBuilder(BasicBlockKind.Block); 2704private IOperation VisitConditionalExpression(IOperation condition, bool sense, int? captureIdForResult, BasicBlockBuilder? fallToTrueOpt, BasicBlockBuilder? fallToFalseOpt) 2760private void VisitConditionalBranch(IOperation condition, [NotNull] ref BasicBlockBuilder? dest, bool jumpIfTrue) 2775private void VisitConditionalBranchCore(IOperation condition, [NotNull] ref BasicBlockBuilder? dest, bool jumpIfTrue) 2782void visitConditionalBranchCore(IOperation condition, [NotNull] ref BasicBlockBuilder? dest, bool jumpIfTrue) 2796var stack = ArrayBuilder<(IOperation? condition, BasicBlockBuilder dest, bool jumpIfTrue)>.GetInstance(); 2801(IOperation? condition, BasicBlockBuilder dest, bool jumpIfTrue) top = stack.Pop(); 2816BasicBlockBuilder? fallThrough = new BasicBlockBuilder(BasicBlockKind.Block); 2876BasicBlockBuilder? whenFalse = null; 2880var afterIf = new BasicBlockBuilder(BasicBlockKind.Block); 2899var whenNull = new BasicBlockBuilder(BasicBlockKind.Block); 2909var afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block); 2964private void ConditionalBranch(IOperation condition, bool jumpIfTrue, BasicBlockBuilder destination) 2966BasicBlockBuilder previous = CurrentBasicBlock; 2967BasicBlockBuilder.Branch branch = RegularBranch(destination); 2983private IOperation NullCheckAndConvertCoalesceValue(ICoalesceOperation operation, BasicBlockBuilder whenNull) 3053var whenNull = new BasicBlockBuilder(BasicBlockKind.Block); 3057var afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block); 3126var whenNull = new BasicBlockBuilder(BasicBlockKind.Block); 3127var afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block); 3285private static BasicBlockBuilder.Branch RegularBranch(BasicBlockBuilder destination) 3287return new BasicBlockBuilder.Branch() { Destination = destination, Kind = ControlFlowBranchSemantics.Regular }; 3380var whenNull = new BasicBlockBuilder(BasicBlockKind.Block); 3449var afterAccess = new BasicBlockBuilder(BasicBlockKind.Block); 3580var @continue = GetLabeledOrNewBlock(operation.ContinueLabel); 3581var @break = GetLabeledOrNewBlock(operation.ExitLabel); 3623var start = new BasicBlockBuilder(BasicBlockKind.Block); 3652var afterTryCatchFinally = GetLabeledOrNewBlock(operation.ExitLabel); 3695var catchBlock = new BasicBlockBuilder(BasicBlockKind.Block); 3708var continueDispatchBlock = new BasicBlockBuilder(BasicBlockKind.Block); 3743var predecessors = ArrayBuilder<BasicBlockBuilder>.GetInstance(); 3770var continueDispatchBlock = new BasicBlockBuilder(BasicBlockKind.Block); 3842BasicBlockBuilder current = CurrentBasicBlock; 3867BasicBlockBuilder labeled = GetLabeledOrNewBlock(operation); 3878private BasicBlockBuilder GetLabeledOrNewBlock(ILabelSymbol? labelOpt) 3885BasicBlockBuilder? labeledBlock; 3889_labeledBlocks = PooledDictionary<ILabelSymbol, BasicBlockBuilder>.GetInstance(); 3940BasicBlockBuilder current = CurrentBasicBlock; 4087var afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block); 4119var endOfFinally = new BasicBlockBuilder(BasicBlockKind.Block); 4359var afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block); 4401var endOfFinally = new BasicBlockBuilder(BasicBlockKind.Block); 4505var @continue = GetLabeledOrNewBlock(operation.ContinueLabel); 4506var @break = GetLabeledOrNewBlock(operation.ExitLabel); 4532var afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block); 4745BasicBlockBuilder @continue = GetLabeledOrNewBlock(operation.ContinueLabel); 4746BasicBlockBuilder? @break = GetLabeledOrNewBlock(operation.ExitLabel); 4747BasicBlockBuilder checkConditionBlock = new BasicBlockBuilder(BasicBlockKind.Block); 4748BasicBlockBuilder bodyBlock = new BasicBlockBuilder(BasicBlockKind.Block); 4940var afterPositiveCheck = new BasicBlockBuilder(BasicBlockKind.Block); 4944var whenNotNull = new BasicBlockBuilder(BasicBlockKind.Block); 5051var notPositive = new BasicBlockBuilder(BasicBlockKind.Block); 5169var whenBothNotNull = new BasicBlockBuilder(BasicBlockKind.Block); 5190var notPositive = new BasicBlockBuilder(BasicBlockKind.Block); 5320BasicBlockBuilder afterIncrement = new BasicBlockBuilder(BasicBlockKind.Block); 5332BasicBlockBuilder whenNotNull = new BasicBlockBuilder(BasicBlockKind.Block); 5475BasicBlockBuilder? defaultBody = null; // Adjusted in handleSection 5476BasicBlockBuilder @break = GetLabeledOrNewBlock(operation.ExitLabel); 5508var body = new BasicBlockBuilder(BasicBlockKind.Block); 5509var nextSection = new BasicBlockBuilder(BasicBlockKind.Block); 5524var nextCase = new BasicBlockBuilder(BasicBlockKind.Block); 5541void handleCase(ICaseClauseOperation caseClause, BasicBlockBuilder body, [DisallowNull] BasicBlockBuilder? nextCase) 5544BasicBlockBuilder labeled = GetLabeledOrNewBlock(caseClause.Label); 5705BasicBlockBuilder current = CurrentBasicBlock; 5750var start = new BasicBlockBuilder(BasicBlockKind.Block); 5755var @break = GetLabeledOrNewBlock(operation.ExitLabel); 5763var @continue = GetLabeledOrNewBlock(operation.ContinueLabel); 5829BasicBlockBuilder? afterInitialization = null; 6822BasicBlockBuilder? resultBlock = null; 7775var afterSwitch = new BasicBlockBuilder(BasicBlockKind.Block); 7782var afterArm = new BasicBlockBuilder(BasicBlockKind.Block);
Operations\ControlFlowGraphBuilder.RegionBuilder.cs (5)
20public BasicBlockBuilder? FirstBlock = null; 21public BasicBlockBuilder? LastBlock = null; 248public void ExtendToInclude(BasicBlockBuilder block) 296public ControlFlowRegion ToImmutableRegionAndFree(ArrayBuilder<BasicBlockBuilder> blocks, 375void setRegion(BasicBlockBuilder block)