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);
1263
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
1345
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
1576
var afterIf = new
BasicBlockBuilder
(BasicBlockKind.Block);
1608
var afterIf = new
BasicBlockBuilder
(BasicBlockKind.Block);
2332
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2333
var checkRight = new
BasicBlockBuilder
(BasicBlockKind.Block);
2334
var resultIsLeft = new
BasicBlockBuilder
(BasicBlockKind.Block);
2401
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2402
var checkRight = new
BasicBlockBuilder
(BasicBlockKind.Block);
2464
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2465
var doBitWise = new
BasicBlockBuilder
(BasicBlockKind.Block);
2561
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2562
var doBitWise = new
BasicBlockBuilder
(BasicBlockKind.Block);
2670
var labEnd = new
BasicBlockBuilder
(BasicBlockKind.Block);
2776
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
2797
BasicBlockBuilder? fallThrough = new
BasicBlockBuilder
(BasicBlockKind.Block);
2861
var afterIf = new
BasicBlockBuilder
(BasicBlockKind.Block);
2880
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
2886
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
2890
var afterCoalesce = new
BasicBlockBuilder
(BasicBlockKind.Block);
2914
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
2924
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
3034
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
3038
var afterCoalesce = new
BasicBlockBuilder
(BasicBlockKind.Block);
3107
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
3108
var afterCoalesce = new
BasicBlockBuilder
(BasicBlockKind.Block);
3361
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
3430
var afterAccess = new
BasicBlockBuilder
(BasicBlockKind.Block);
3604
var start = new
BasicBlockBuilder
(BasicBlockKind.Block);
3676
var catchBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3689
var continueDispatchBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3749
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
3751
var continueDispatchBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3853
labeled = new
BasicBlockBuilder
(BasicBlockKind.Block);
3863
return new
BasicBlockBuilder
(BasicBlockKind.Block);
3877
labeledBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3907
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block), linkToPrevious: false);
4065
var afterTryFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4096
var endOfFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4101
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
4276
var afterTryFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4318
var endOfFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4322
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
4449
var afterTryFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4648
BasicBlockBuilder checkConditionBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
4649
BasicBlockBuilder bodyBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
4841
var afterPositiveCheck = new
BasicBlockBuilder
(BasicBlockKind.Block);
4845
var whenNotNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
4952
var notPositive = new
BasicBlockBuilder
(BasicBlockKind.Block);
5070
var whenBothNotNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
5091
var notPositive = new
BasicBlockBuilder
(BasicBlockKind.Block);
5221
BasicBlockBuilder afterIncrement = new
BasicBlockBuilder
(BasicBlockKind.Block);
5233
BasicBlockBuilder whenNotNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
5409
var body = new
BasicBlockBuilder
(BasicBlockKind.Block);
5410
var nextSection = new
BasicBlockBuilder
(BasicBlockKind.Block);
5425
var nextCase = new
BasicBlockBuilder
(BasicBlockKind.Block);
5520
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
5607
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block), linkToPrevious: false);
5651
var start = new
BasicBlockBuilder
(BasicBlockKind.Block);
5733
afterInitialization = new
BasicBlockBuilder
(BasicBlockKind.Block);
6563
resultBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
7479
var afterSwitch = new
BasicBlockBuilder
(BasicBlockKind.Block);
7486
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> ToImmutableBlocks(ArrayBuilder<
BasicBlockBuilder
> blockBuilders)
177
foreach (
BasicBlockBuilder
blockBuilder in blockBuilders)
184
foreach (
BasicBlockBuilder
blockBuilder in blockBuilders)
192
foreach (
BasicBlockBuilder
blockBuilder in blockBuilders)
199
ControlFlowBranch? getFallThroughSuccessor(
BasicBlockBuilder
blockBuilder)
206
ControlFlowBranch? getConditionalSuccessor(
BasicBlockBuilder
blockBuilder)
213
ControlFlowBranch getBranch(in
BasicBlockBuilder
.Branch branch,
BasicBlockBuilder
source, bool isConditionalSuccessor)
223
private static void MarkReachableBlocks(ArrayBuilder<
BasicBlockBuilder
> blocks)
240
ArrayBuilder<
BasicBlockBuilder
> blocks,
243
ArrayBuilder<
BasicBlockBuilder
>? outOfRangeBlocksToVisit,
249
var toVisit = ArrayBuilder<
BasicBlockBuilder
>.GetInstance();
256
BasicBlockBuilder
current = toVisit.Pop();
292
BasicBlockBuilder
.Branch branch = current.FallThrough;
313
void followBranch(
BasicBlockBuilder
current, in
BasicBlockBuilder
.Branch branch)
344
bool stepThroughFinally(ControlFlowRegion region,
BasicBlockBuilder
destination)
476
BasicBlockBuilder
entryBlock = blocks[@catch.FirstBlockOrdinal];
494
private static void Pack(ArrayBuilder<
BasicBlockBuilder
> blocks, RegionBuilder root, PooledDictionary<
BasicBlockBuilder
, RegionBuilder> regionMap)
511
private static bool PackRegions(RegionBuilder root, ArrayBuilder<
BasicBlockBuilder
> blocks, PooledDictionary<
BasicBlockBuilder
, RegionBuilder> regionMap)
577
BasicBlockBuilder
block = subRegion.FirstBlock;
614
private static void MergeSubRegionAndFree(RegionBuilder subRegion, ArrayBuilder<
BasicBlockBuilder
> blocks, PooledDictionary<
BasicBlockBuilder
, RegionBuilder> regionMap, bool canHaveEmptyRegion = false)
670
private static bool PackBlocks(ArrayBuilder<
BasicBlockBuilder
> blocks, PooledDictionary<
BasicBlockBuilder
, RegionBuilder> regionMap)
675
ArrayBuilder<
BasicBlockBuilder
>? predecessorsBuilder = null;
690
BasicBlockBuilder
block = blocks[i];
696
BasicBlockBuilder
? predecessor = block.GetSingletonPredecessorOrDefault();
716
ref
BasicBlockBuilder
.Branch next = ref block.FallThrough;
803
BasicBlockBuilder
? predecessor = block.GetSingletonPredecessorOrDefault();
869
BasicBlockBuilder
? predecessor = block.GetSingletonPredecessorOrDefault();
893
predecessorsBuilder = ArrayBuilder<
BasicBlockBuilder
>.GetInstance();
915
foreach (
BasicBlockBuilder
predecessor in predecessorsBuilder)
956
BasicBlockBuilder
? predecessor = block.GetSingletonPredecessorOrDefault();
986
BasicBlockBuilder
? destination = block.Conditional.Destination;
1014
RegionBuilder? tryGetImplicitEntryRegion(
BasicBlockBuilder
block, [DisallowNull] RegionBuilder? currentRegion)
1038
void removeBlock(
BasicBlockBuilder
block, RegionBuilder region)
1048
BasicBlockBuilder
newFirst = blocks[block.Ordinal + 1];
1061
BasicBlockBuilder
newLast = blocks[block.Ordinal - 1];
1082
bool tryMergeBranch(
BasicBlockBuilder
predecessor, ref
BasicBlockBuilder
.Branch predecessorBranch,
BasicBlockBuilder
successor)
1093
void mergeBranch(
BasicBlockBuilder
predecessor, ref
BasicBlockBuilder
.Branch predecessorBranch, ref
BasicBlockBuilder
.Branch successorBranch)
1101
bool checkBranchesFromPredecessors(ArrayBuilder<
BasicBlockBuilder
> predecessors, RegionBuilder currentRegion, RegionBuilder? destinationRegionOpt)
1103
foreach (
BasicBlockBuilder
predecessor in predecessors)
1186
private static void CheckUnresolvedBranches(ArrayBuilder<
BasicBlockBuilder
> blocks, PooledDictionary<ILabelSymbol,
BasicBlockBuilder
>? labeledBlocks)
1193
PooledHashSet<
BasicBlockBuilder
>? unresolved = null;
1194
foreach (
BasicBlockBuilder
labeled in labeledBlocks.Values)
1200
unresolved = PooledHashSet<
BasicBlockBuilder
>.GetInstance();
1213
foreach (
BasicBlockBuilder
block in blocks)
1222
void fixupBranch(ref
BasicBlockBuilder
.Branch branch)
1257
private
BasicBlockBuilder
CurrentBasicBlock
1295
private void AppendNewBlock(
BasicBlockBuilder
block, bool linkToPrevious = true)
1302
BasicBlockBuilder
prevBlock = _blocks.Last();
1368
private static void LinkBlocks(
BasicBlockBuilder
prevBlock,
BasicBlockBuilder
nextBlock, ControlFlowBranchSemantics branchKind = ControlFlowBranchSemantics.Regular)
1377
private void UnconditionalBranch(
BasicBlockBuilder
nextBlock)
1550
BasicBlockBuilder
? afterIf = null;
1571
BasicBlockBuilder
? whenFalse = null;
1576
var
afterIf = new BasicBlockBuilder(BasicBlockKind.Block);
1605
BasicBlockBuilder
? whenFalse = null;
1608
var
afterIf = new BasicBlockBuilder(BasicBlockKind.Block);
2269
BasicBlockBuilder
? fallToTrueOpt,
BasicBlockBuilder
? fallToFalseOpt)
2332
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2333
var
checkRight = new BasicBlockBuilder(BasicBlockKind.Block);
2334
var
resultIsLeft = new BasicBlockBuilder(BasicBlockKind.Block);
2401
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2402
var
checkRight = new BasicBlockBuilder(BasicBlockKind.Block);
2464
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2465
var
doBitWise = new BasicBlockBuilder(BasicBlockKind.Block);
2561
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2562
var
doBitWise = new BasicBlockBuilder(BasicBlockKind.Block);
2635
int? captureIdForResult,
BasicBlockBuilder
? fallToTrueOpt,
BasicBlockBuilder
? fallToFalseOpt)
2654
ref
BasicBlockBuilder
? lazyFallThrough = ref stopValue ? ref fallToTrueOpt : ref fallToFalseOpt;
2670
var
labEnd = new BasicBlockBuilder(BasicBlockKind.Block);
2685
private IOperation VisitConditionalExpression(IOperation condition, bool sense, int? captureIdForResult,
BasicBlockBuilder
? fallToTrueOpt,
BasicBlockBuilder
? fallToFalseOpt)
2741
private void VisitConditionalBranch(IOperation condition, [NotNull] ref
BasicBlockBuilder
? dest, bool jumpIfTrue)
2756
private void VisitConditionalBranchCore(IOperation condition, [NotNull] ref
BasicBlockBuilder
? dest, bool jumpIfTrue)
2763
void visitConditionalBranchCore(IOperation condition, [NotNull] ref
BasicBlockBuilder
? dest, bool jumpIfTrue)
2777
var stack = ArrayBuilder<(IOperation? condition,
BasicBlockBuilder
dest, bool jumpIfTrue)>.GetInstance();
2782
(IOperation? condition,
BasicBlockBuilder
dest, bool jumpIfTrue) top = stack.Pop();
2797
BasicBlockBuilder
? fallThrough = new BasicBlockBuilder(BasicBlockKind.Block);
2857
BasicBlockBuilder
? whenFalse = null;
2861
var
afterIf = new BasicBlockBuilder(BasicBlockKind.Block);
2880
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
2890
var
afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block);
2945
private void ConditionalBranch(IOperation condition, bool jumpIfTrue,
BasicBlockBuilder
destination)
2947
BasicBlockBuilder
previous = CurrentBasicBlock;
2948
BasicBlockBuilder
.Branch branch = RegularBranch(destination);
2964
private IOperation NullCheckAndConvertCoalesceValue(ICoalesceOperation operation,
BasicBlockBuilder
whenNull)
3034
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
3038
var
afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block);
3107
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
3108
var
afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block);
3266
private static
BasicBlockBuilder
.Branch RegularBranch(
BasicBlockBuilder
destination)
3268
return new
BasicBlockBuilder
.Branch() { Destination = destination, Kind = ControlFlowBranchSemantics.Regular };
3361
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
3430
var
afterAccess = new BasicBlockBuilder(BasicBlockKind.Block);
3561
var
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
3562
var
@break = GetLabeledOrNewBlock(operation.ExitLabel);
3604
var
start = new BasicBlockBuilder(BasicBlockKind.Block);
3633
var
afterTryCatchFinally = GetLabeledOrNewBlock(operation.ExitLabel);
3676
var
catchBlock = new BasicBlockBuilder(BasicBlockKind.Block);
3689
var
continueDispatchBlock = new BasicBlockBuilder(BasicBlockKind.Block);
3724
var predecessors = ArrayBuilder<
BasicBlockBuilder
>.GetInstance();
3751
var
continueDispatchBlock = new BasicBlockBuilder(BasicBlockKind.Block);
3823
BasicBlockBuilder
current = CurrentBasicBlock;
3848
BasicBlockBuilder
labeled = GetLabeledOrNewBlock(operation);
3859
private
BasicBlockBuilder
GetLabeledOrNewBlock(ILabelSymbol? labelOpt)
3866
BasicBlockBuilder
? labeledBlock;
3870
_labeledBlocks = PooledDictionary<ILabelSymbol,
BasicBlockBuilder
>.GetInstance();
3921
BasicBlockBuilder
current = CurrentBasicBlock;
4065
var
afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4096
var
endOfFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4276
var
afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4318
var
endOfFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4422
var
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
4423
var
@break = GetLabeledOrNewBlock(operation.ExitLabel);
4449
var
afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4646
BasicBlockBuilder
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
4647
BasicBlockBuilder
? @break = GetLabeledOrNewBlock(operation.ExitLabel);
4648
BasicBlockBuilder
checkConditionBlock = new BasicBlockBuilder(BasicBlockKind.Block);
4649
BasicBlockBuilder
bodyBlock = new BasicBlockBuilder(BasicBlockKind.Block);
4841
var
afterPositiveCheck = new BasicBlockBuilder(BasicBlockKind.Block);
4845
var
whenNotNull = new BasicBlockBuilder(BasicBlockKind.Block);
4952
var
notPositive = new BasicBlockBuilder(BasicBlockKind.Block);
5070
var
whenBothNotNull = new BasicBlockBuilder(BasicBlockKind.Block);
5091
var
notPositive = new BasicBlockBuilder(BasicBlockKind.Block);
5221
BasicBlockBuilder
afterIncrement = new BasicBlockBuilder(BasicBlockKind.Block);
5233
BasicBlockBuilder
whenNotNull = new BasicBlockBuilder(BasicBlockKind.Block);
5376
BasicBlockBuilder
? defaultBody = null; // Adjusted in handleSection
5377
BasicBlockBuilder
@break = GetLabeledOrNewBlock(operation.ExitLabel);
5409
var
body = new BasicBlockBuilder(BasicBlockKind.Block);
5410
var
nextSection = new BasicBlockBuilder(BasicBlockKind.Block);
5425
var
nextCase = new BasicBlockBuilder(BasicBlockKind.Block);
5442
void handleCase(ICaseClauseOperation caseClause,
BasicBlockBuilder
body, [DisallowNull]
BasicBlockBuilder
? nextCase)
5445
BasicBlockBuilder
labeled = GetLabeledOrNewBlock(caseClause.Label);
5606
BasicBlockBuilder
current = CurrentBasicBlock;
5651
var
start = new BasicBlockBuilder(BasicBlockKind.Block);
5656
var
@break = GetLabeledOrNewBlock(operation.ExitLabel);
5664
var
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
5730
BasicBlockBuilder
? afterInitialization = null;
6560
BasicBlockBuilder
? resultBlock = null;
7479
var
afterSwitch = new BasicBlockBuilder(BasicBlockKind.Block);
7486
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)