65 instantiations of BasicBlockBuilder
Microsoft.CodeAnalysis (65)
Operations\ControlFlowGraphBuilder.cs (65)
30
private readonly BasicBlockBuilder _entry = new
BasicBlockBuilder
(BasicBlockKind.Entry);
31
private readonly BasicBlockBuilder _exit = new
BasicBlockBuilder
(BasicBlockKind.Exit);
1271
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
1354
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
1571
var afterIf = new
BasicBlockBuilder
(BasicBlockKind.Block);
1623
var afterIf = new
BasicBlockBuilder
(BasicBlockKind.Block);
2359
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2360
var checkRight = new
BasicBlockBuilder
(BasicBlockKind.Block);
2361
var resultIsLeft = new
BasicBlockBuilder
(BasicBlockKind.Block);
2428
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2429
var checkRight = new
BasicBlockBuilder
(BasicBlockKind.Block);
2491
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2492
var doBitWise = new
BasicBlockBuilder
(BasicBlockKind.Block);
2588
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2589
var doBitWise = new
BasicBlockBuilder
(BasicBlockKind.Block);
2697
var labEnd = new
BasicBlockBuilder
(BasicBlockKind.Block);
2803
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
2824
BasicBlockBuilder? fallThrough = new
BasicBlockBuilder
(BasicBlockKind.Block);
2888
var afterIf = new
BasicBlockBuilder
(BasicBlockKind.Block);
2907
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
2913
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
2917
var afterCoalesce = new
BasicBlockBuilder
(BasicBlockKind.Block);
2941
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
2951
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
3061
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
3065
var afterCoalesce = new
BasicBlockBuilder
(BasicBlockKind.Block);
3134
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
3135
var afterCoalesce = new
BasicBlockBuilder
(BasicBlockKind.Block);
3388
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
3457
var afterAccess = new
BasicBlockBuilder
(BasicBlockKind.Block);
3631
var start = new
BasicBlockBuilder
(BasicBlockKind.Block);
3703
var catchBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3716
var continueDispatchBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3776
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
3778
var continueDispatchBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3880
labeled = new
BasicBlockBuilder
(BasicBlockKind.Block);
3890
return new
BasicBlockBuilder
(BasicBlockKind.Block);
3904
labeledBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3934
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block), linkToPrevious: false);
4096
var afterTryFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4128
var endOfFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4133
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
4368
var afterTryFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4410
var endOfFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4414
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
4541
var afterTryFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4756
BasicBlockBuilder checkConditionBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
4757
BasicBlockBuilder bodyBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
4949
var afterPositiveCheck = new
BasicBlockBuilder
(BasicBlockKind.Block);
4953
var whenNotNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
5060
var notPositive = new
BasicBlockBuilder
(BasicBlockKind.Block);
5178
var whenBothNotNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
5199
var notPositive = new
BasicBlockBuilder
(BasicBlockKind.Block);
5329
BasicBlockBuilder afterIncrement = new
BasicBlockBuilder
(BasicBlockKind.Block);
5341
BasicBlockBuilder whenNotNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
5517
var body = new
BasicBlockBuilder
(BasicBlockKind.Block);
5518
var nextSection = new
BasicBlockBuilder
(BasicBlockKind.Block);
5533
var nextCase = new
BasicBlockBuilder
(BasicBlockKind.Block);
5628
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
5715
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block), linkToPrevious: false);
5759
var start = new
BasicBlockBuilder
(BasicBlockKind.Block);
5841
afterInitialization = new
BasicBlockBuilder
(BasicBlockKind.Block);
6834
resultBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
7787
var afterSwitch = new
BasicBlockBuilder
(BasicBlockKind.Block);
7794
var afterArm = new
BasicBlockBuilder
(BasicBlockKind.Block);
184 references to BasicBlockBuilder
Microsoft.CodeAnalysis (184)
Operations\ControlFlowGraphBuilder.BasicBlockBuilder.cs (13)
23
private
BasicBlockBuilder
? _predecessor1;
24
private
BasicBlockBuilder
? _predecessor2;
25
private PooledHashSet<
BasicBlockBuilder
>? _predecessors;
61
public void MoveStatementsFrom(
BasicBlockBuilder
other)
121
public
BasicBlockBuilder
? GetSingletonPredecessorOrDefault()
143
public void AddPredecessor(
BasicBlockBuilder
predecessor)
171
_predecessors = PooledHashSet<
BasicBlockBuilder
>.GetInstance();
181
public void RemovePredecessor(
BasicBlockBuilder
predecessor)
201
public void GetPredecessors(ArrayBuilder<
BasicBlockBuilder
> builder)
208
foreach (
BasicBlockBuilder
predecessor in _predecessors)
245
foreach (
BasicBlockBuilder
predecessorBlockBuilder in _predecessors)
289
void addBranches(
BasicBlockBuilder
predecessorBlockBuilder)
319
public
BasicBlockBuilder
? Destination { get; set; }
Operations\ControlFlowGraphBuilder.ConditionalAccessOperationTracker.cs (2)
26
public readonly
BasicBlockBuilder
? WhenNull;
28
public ConditionalAccessOperationTracker(ArrayBuilder<IOperation> operations,
BasicBlockBuilder
whenNull)
Operations\ControlFlowGraphBuilder.cs (164)
30
private readonly
BasicBlockBuilder
_entry = new BasicBlockBuilder(BasicBlockKind.Entry);
31
private readonly
BasicBlockBuilder
_exit = new BasicBlockBuilder(BasicBlockKind.Exit);
33
private readonly ArrayBuilder<
BasicBlockBuilder
> _blocks;
34
private readonly PooledDictionary<
BasicBlockBuilder
, RegionBuilder> _regionMap;
35
private
BasicBlockBuilder
? _currentBasicBlock;
37
private PooledDictionary<ILabelSymbol,
BasicBlockBuilder
>? _labeledBlocks;
63
private ControlFlowGraphBuilder(Compilation compilation, CaptureIdDispenser? captureIdDispenser, ArrayBuilder<
BasicBlockBuilder
> blocks)
69
_regionMap = PooledDictionary<
BasicBlockBuilder
, RegionBuilder>.GetInstance();
113
var blocks = ArrayBuilder<
BasicBlockBuilder
>.GetInstance();
172
private static ImmutableArray<BasicBlock> ToImmutableBlocksAndFree(ArrayBuilder<
BasicBlockBuilder
> blockBuilders)
177
foreach (
BasicBlockBuilder
blockBuilder in blockBuilders)
184
foreach (
BasicBlockBuilder
blockBuilder in blockBuilders)
192
foreach (
BasicBlockBuilder
blockBuilder in blockBuilders)
198
foreach (
BasicBlockBuilder
blockBuilder in blockBuilders)
207
ControlFlowBranch? getFallThroughSuccessor(
BasicBlockBuilder
blockBuilder)
214
ControlFlowBranch? getConditionalSuccessor(
BasicBlockBuilder
blockBuilder)
221
ControlFlowBranch getBranch(in
BasicBlockBuilder
.Branch branch,
BasicBlockBuilder
source, bool isConditionalSuccessor)
231
private static void MarkReachableBlocks(ArrayBuilder<
BasicBlockBuilder
> blocks)
248
ArrayBuilder<
BasicBlockBuilder
> blocks,
251
ArrayBuilder<
BasicBlockBuilder
>? outOfRangeBlocksToVisit,
257
var toVisit = ArrayBuilder<
BasicBlockBuilder
>.GetInstance();
264
BasicBlockBuilder
current = toVisit.Pop();
300
BasicBlockBuilder
.Branch branch = current.FallThrough;
321
void followBranch(
BasicBlockBuilder
current, in
BasicBlockBuilder
.Branch branch)
352
bool stepThroughFinally(ControlFlowRegion region,
BasicBlockBuilder
destination)
484
BasicBlockBuilder
entryBlock = blocks[@catch.FirstBlockOrdinal];
502
private static void Pack(ArrayBuilder<
BasicBlockBuilder
> blocks, RegionBuilder root, PooledDictionary<
BasicBlockBuilder
, RegionBuilder> regionMap)
519
private static bool PackRegions(RegionBuilder root, ArrayBuilder<
BasicBlockBuilder
> blocks, PooledDictionary<
BasicBlockBuilder
, RegionBuilder> regionMap)
585
BasicBlockBuilder
block = subRegion.FirstBlock;
622
private static void MergeSubRegionAndFree(RegionBuilder subRegion, ArrayBuilder<
BasicBlockBuilder
> blocks, PooledDictionary<
BasicBlockBuilder
, RegionBuilder> regionMap, bool canHaveEmptyRegion = false)
678
private static bool PackBlocks(ArrayBuilder<
BasicBlockBuilder
> blocks, PooledDictionary<
BasicBlockBuilder
, RegionBuilder> regionMap)
683
ArrayBuilder<
BasicBlockBuilder
>? predecessorsBuilder = null;
698
BasicBlockBuilder
block = blocks[i];
704
BasicBlockBuilder
? predecessor = block.GetSingletonPredecessorOrDefault();
724
ref
BasicBlockBuilder
.Branch next = ref block.FallThrough;
811
BasicBlockBuilder
? predecessor = block.GetSingletonPredecessorOrDefault();
877
BasicBlockBuilder
? predecessor = block.GetSingletonPredecessorOrDefault();
901
predecessorsBuilder = ArrayBuilder<
BasicBlockBuilder
>.GetInstance();
923
foreach (
BasicBlockBuilder
predecessor in predecessorsBuilder)
964
BasicBlockBuilder
? predecessor = block.GetSingletonPredecessorOrDefault();
994
BasicBlockBuilder
? destination = block.Conditional.Destination;
1022
RegionBuilder? tryGetImplicitEntryRegion(
BasicBlockBuilder
block, [DisallowNull] RegionBuilder? currentRegion)
1046
void removeBlock(
BasicBlockBuilder
block, RegionBuilder region)
1056
BasicBlockBuilder
newFirst = blocks[block.Ordinal + 1];
1069
BasicBlockBuilder
newLast = blocks[block.Ordinal - 1];
1090
bool tryMergeBranch(
BasicBlockBuilder
predecessor, ref
BasicBlockBuilder
.Branch predecessorBranch,
BasicBlockBuilder
successor)
1101
void mergeBranch(
BasicBlockBuilder
predecessor, ref
BasicBlockBuilder
.Branch predecessorBranch, ref
BasicBlockBuilder
.Branch successorBranch)
1109
bool checkBranchesFromPredecessors(ArrayBuilder<
BasicBlockBuilder
> predecessors, RegionBuilder currentRegion, RegionBuilder? destinationRegionOpt)
1111
foreach (
BasicBlockBuilder
predecessor in predecessors)
1194
private static void CheckUnresolvedBranches(ArrayBuilder<
BasicBlockBuilder
> blocks, PooledDictionary<ILabelSymbol,
BasicBlockBuilder
>? labeledBlocks)
1201
PooledHashSet<
BasicBlockBuilder
>? unresolved = null;
1202
foreach (
BasicBlockBuilder
labeled in labeledBlocks.Values)
1208
unresolved = PooledHashSet<
BasicBlockBuilder
>.GetInstance();
1221
foreach (
BasicBlockBuilder
block in blocks)
1230
void fixupBranch(ref
BasicBlockBuilder
.Branch branch)
1265
private
BasicBlockBuilder
CurrentBasicBlock
1304
private void AppendNewBlock(
BasicBlockBuilder
block, bool linkToPrevious = true)
1311
BasicBlockBuilder
prevBlock = _blocks.Last();
1377
private static void LinkBlocks(
BasicBlockBuilder
prevBlock,
BasicBlockBuilder
nextBlock, ControlFlowBranchSemantics branchKind = ControlFlowBranchSemantics.Regular)
1386
private void UnconditionalBranch(
BasicBlockBuilder
nextBlock)
1571
var
afterIf = new BasicBlockBuilder(BasicBlockKind.Block);
1575
BasicBlockBuilder
? whenFalse = null;
1620
BasicBlockBuilder
? whenFalse = null;
1623
var
afterIf = new BasicBlockBuilder(BasicBlockKind.Block);
2296
BasicBlockBuilder
? fallToTrueOpt,
BasicBlockBuilder
? fallToFalseOpt)
2359
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2360
var
checkRight = new BasicBlockBuilder(BasicBlockKind.Block);
2361
var
resultIsLeft = new BasicBlockBuilder(BasicBlockKind.Block);
2428
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2429
var
checkRight = new BasicBlockBuilder(BasicBlockKind.Block);
2491
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2492
var
doBitWise = new BasicBlockBuilder(BasicBlockKind.Block);
2588
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2589
var
doBitWise = new BasicBlockBuilder(BasicBlockKind.Block);
2662
int? captureIdForResult,
BasicBlockBuilder
? fallToTrueOpt,
BasicBlockBuilder
? fallToFalseOpt)
2681
ref
BasicBlockBuilder
? lazyFallThrough = ref stopValue ? ref fallToTrueOpt : ref fallToFalseOpt;
2697
var
labEnd = new BasicBlockBuilder(BasicBlockKind.Block);
2712
private IOperation VisitConditionalExpression(IOperation condition, bool sense, int? captureIdForResult,
BasicBlockBuilder
? fallToTrueOpt,
BasicBlockBuilder
? fallToFalseOpt)
2768
private void VisitConditionalBranch(IOperation condition, [NotNull] ref
BasicBlockBuilder
? dest, bool jumpIfTrue)
2783
private void VisitConditionalBranchCore(IOperation condition, [NotNull] ref
BasicBlockBuilder
? dest, bool jumpIfTrue)
2790
void visitConditionalBranchCore(IOperation condition, [NotNull] ref
BasicBlockBuilder
? dest, bool jumpIfTrue)
2804
var stack = ArrayBuilder<(IOperation? condition,
BasicBlockBuilder
dest, bool jumpIfTrue)>.GetInstance();
2809
(IOperation? condition,
BasicBlockBuilder
dest, bool jumpIfTrue) top = stack.Pop();
2824
BasicBlockBuilder
? fallThrough = new BasicBlockBuilder(BasicBlockKind.Block);
2884
BasicBlockBuilder
? whenFalse = null;
2888
var
afterIf = new BasicBlockBuilder(BasicBlockKind.Block);
2907
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
2917
var
afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block);
2972
private void ConditionalBranch(IOperation condition, bool jumpIfTrue,
BasicBlockBuilder
destination)
2974
BasicBlockBuilder
previous = CurrentBasicBlock;
2975
BasicBlockBuilder
.Branch branch = RegularBranch(destination);
2991
private IOperation NullCheckAndConvertCoalesceValue(ICoalesceOperation operation,
BasicBlockBuilder
whenNull)
3061
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
3065
var
afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block);
3134
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
3135
var
afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block);
3293
private static
BasicBlockBuilder
.Branch RegularBranch(
BasicBlockBuilder
destination)
3295
return new
BasicBlockBuilder
.Branch() { Destination = destination, Kind = ControlFlowBranchSemantics.Regular };
3388
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
3457
var
afterAccess = new BasicBlockBuilder(BasicBlockKind.Block);
3588
var
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
3589
var
@break = GetLabeledOrNewBlock(operation.ExitLabel);
3631
var
start = new BasicBlockBuilder(BasicBlockKind.Block);
3660
var
afterTryCatchFinally = GetLabeledOrNewBlock(operation.ExitLabel);
3703
var
catchBlock = new BasicBlockBuilder(BasicBlockKind.Block);
3716
var
continueDispatchBlock = new BasicBlockBuilder(BasicBlockKind.Block);
3751
var predecessors = ArrayBuilder<
BasicBlockBuilder
>.GetInstance();
3778
var
continueDispatchBlock = new BasicBlockBuilder(BasicBlockKind.Block);
3850
BasicBlockBuilder
current = CurrentBasicBlock;
3875
BasicBlockBuilder
labeled = GetLabeledOrNewBlock(operation);
3886
private
BasicBlockBuilder
GetLabeledOrNewBlock(ILabelSymbol? labelOpt)
3893
BasicBlockBuilder
? labeledBlock;
3897
_labeledBlocks = PooledDictionary<ILabelSymbol,
BasicBlockBuilder
>.GetInstance();
3948
BasicBlockBuilder
current = CurrentBasicBlock;
4096
var
afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4128
var
endOfFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4368
var
afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4410
var
endOfFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4514
var
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
4515
var
@break = GetLabeledOrNewBlock(operation.ExitLabel);
4541
var
afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4754
BasicBlockBuilder
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
4755
BasicBlockBuilder
? @break = GetLabeledOrNewBlock(operation.ExitLabel);
4756
BasicBlockBuilder
checkConditionBlock = new BasicBlockBuilder(BasicBlockKind.Block);
4757
BasicBlockBuilder
bodyBlock = new BasicBlockBuilder(BasicBlockKind.Block);
4949
var
afterPositiveCheck = new BasicBlockBuilder(BasicBlockKind.Block);
4953
var
whenNotNull = new BasicBlockBuilder(BasicBlockKind.Block);
5060
var
notPositive = new BasicBlockBuilder(BasicBlockKind.Block);
5178
var
whenBothNotNull = new BasicBlockBuilder(BasicBlockKind.Block);
5199
var
notPositive = new BasicBlockBuilder(BasicBlockKind.Block);
5329
BasicBlockBuilder
afterIncrement = new BasicBlockBuilder(BasicBlockKind.Block);
5341
BasicBlockBuilder
whenNotNull = new BasicBlockBuilder(BasicBlockKind.Block);
5484
BasicBlockBuilder
? defaultBody = null; // Adjusted in handleSection
5485
BasicBlockBuilder
@break = GetLabeledOrNewBlock(operation.ExitLabel);
5517
var
body = new BasicBlockBuilder(BasicBlockKind.Block);
5518
var
nextSection = new BasicBlockBuilder(BasicBlockKind.Block);
5533
var
nextCase = new BasicBlockBuilder(BasicBlockKind.Block);
5550
void handleCase(ICaseClauseOperation caseClause,
BasicBlockBuilder
body, [DisallowNull]
BasicBlockBuilder
? nextCase)
5553
BasicBlockBuilder
labeled = GetLabeledOrNewBlock(caseClause.Label);
5714
BasicBlockBuilder
current = CurrentBasicBlock;
5759
var
start = new BasicBlockBuilder(BasicBlockKind.Block);
5764
var
@break = GetLabeledOrNewBlock(operation.ExitLabel);
5772
var
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
5838
BasicBlockBuilder
? afterInitialization = null;
6831
BasicBlockBuilder
? resultBlock = null;
7787
var
afterSwitch = new BasicBlockBuilder(BasicBlockKind.Block);
7794
var
afterArm = new BasicBlockBuilder(BasicBlockKind.Block);
Operations\ControlFlowGraphBuilder.RegionBuilder.cs (5)
20
public
BasicBlockBuilder
? FirstBlock = null;
21
public
BasicBlockBuilder
? LastBlock = null;
248
public void ExtendToInclude(
BasicBlockBuilder
block)
296
public ControlFlowRegion ToImmutableRegionAndFree(ArrayBuilder<
BasicBlockBuilder
> blocks,
375
void setRegion(
BasicBlockBuilder
block)