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));
1346
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
1563
var afterIf = new
BasicBlockBuilder
(BasicBlockKind.Block);
1615
var afterIf = new
BasicBlockBuilder
(BasicBlockKind.Block);
2351
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2352
var checkRight = new
BasicBlockBuilder
(BasicBlockKind.Block);
2353
var resultIsLeft = new
BasicBlockBuilder
(BasicBlockKind.Block);
2420
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2421
var checkRight = new
BasicBlockBuilder
(BasicBlockKind.Block);
2483
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2484
var doBitWise = new
BasicBlockBuilder
(BasicBlockKind.Block);
2580
var done = new
BasicBlockBuilder
(BasicBlockKind.Block);
2581
var doBitWise = new
BasicBlockBuilder
(BasicBlockKind.Block);
2689
var labEnd = new
BasicBlockBuilder
(BasicBlockKind.Block);
2795
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
2816
BasicBlockBuilder? fallThrough = new
BasicBlockBuilder
(BasicBlockKind.Block);
2880
var afterIf = new
BasicBlockBuilder
(BasicBlockKind.Block);
2899
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
2905
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
2909
var afterCoalesce = new
BasicBlockBuilder
(BasicBlockKind.Block);
2933
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
2943
dest ??= new
BasicBlockBuilder
(BasicBlockKind.Block);
3053
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
3057
var afterCoalesce = new
BasicBlockBuilder
(BasicBlockKind.Block);
3126
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
3127
var afterCoalesce = new
BasicBlockBuilder
(BasicBlockKind.Block);
3380
var whenNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
3449
var afterAccess = new
BasicBlockBuilder
(BasicBlockKind.Block);
3623
var start = new
BasicBlockBuilder
(BasicBlockKind.Block);
3695
var catchBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3708
var continueDispatchBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3768
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
3770
var continueDispatchBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3872
labeled = new
BasicBlockBuilder
(BasicBlockKind.Block);
3882
return new
BasicBlockBuilder
(BasicBlockKind.Block);
3896
labeledBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
3926
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block), linkToPrevious: false);
4087
var afterTryFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4119
var endOfFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4124
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
4359
var afterTryFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4401
var endOfFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4405
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
4532
var afterTryFinally = new
BasicBlockBuilder
(BasicBlockKind.Block);
4747
BasicBlockBuilder checkConditionBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
4748
BasicBlockBuilder bodyBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
4940
var afterPositiveCheck = new
BasicBlockBuilder
(BasicBlockKind.Block);
4944
var whenNotNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
5051
var notPositive = new
BasicBlockBuilder
(BasicBlockKind.Block);
5169
var whenBothNotNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
5190
var notPositive = new
BasicBlockBuilder
(BasicBlockKind.Block);
5320
BasicBlockBuilder afterIncrement = new
BasicBlockBuilder
(BasicBlockKind.Block);
5332
BasicBlockBuilder whenNotNull = new
BasicBlockBuilder
(BasicBlockKind.Block);
5508
var body = new
BasicBlockBuilder
(BasicBlockKind.Block);
5509
var nextSection = new
BasicBlockBuilder
(BasicBlockKind.Block);
5524
var nextCase = new
BasicBlockBuilder
(BasicBlockKind.Block);
5619
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block));
5706
AppendNewBlock(new
BasicBlockBuilder
(BasicBlockKind.Block), linkToPrevious: false);
5750
var start = new
BasicBlockBuilder
(BasicBlockKind.Block);
5832
afterInitialization = new
BasicBlockBuilder
(BasicBlockKind.Block);
6825
resultBlock = new
BasicBlockBuilder
(BasicBlockKind.Block);
7775
var afterSwitch = new
BasicBlockBuilder
(BasicBlockKind.Block);
7782
var afterArm = new
BasicBlockBuilder
(BasicBlockKind.Block);
183 references to BasicBlockBuilder
Microsoft.CodeAnalysis (183)
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 (163)
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
1296
private void AppendNewBlock(
BasicBlockBuilder
block, bool linkToPrevious = true)
1303
BasicBlockBuilder
prevBlock = _blocks.Last();
1369
private static void LinkBlocks(
BasicBlockBuilder
prevBlock,
BasicBlockBuilder
nextBlock, ControlFlowBranchSemantics branchKind = ControlFlowBranchSemantics.Regular)
1378
private void UnconditionalBranch(
BasicBlockBuilder
nextBlock)
1563
var
afterIf = new BasicBlockBuilder(BasicBlockKind.Block);
1567
BasicBlockBuilder
? whenFalse = null;
1612
BasicBlockBuilder
? whenFalse = null;
1615
var
afterIf = new BasicBlockBuilder(BasicBlockKind.Block);
2288
BasicBlockBuilder
? fallToTrueOpt,
BasicBlockBuilder
? fallToFalseOpt)
2351
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2352
var
checkRight = new BasicBlockBuilder(BasicBlockKind.Block);
2353
var
resultIsLeft = new BasicBlockBuilder(BasicBlockKind.Block);
2420
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2421
var
checkRight = new BasicBlockBuilder(BasicBlockKind.Block);
2483
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2484
var
doBitWise = new BasicBlockBuilder(BasicBlockKind.Block);
2580
var
done = new BasicBlockBuilder(BasicBlockKind.Block);
2581
var
doBitWise = new BasicBlockBuilder(BasicBlockKind.Block);
2654
int? captureIdForResult,
BasicBlockBuilder
? fallToTrueOpt,
BasicBlockBuilder
? fallToFalseOpt)
2673
ref
BasicBlockBuilder
? lazyFallThrough = ref stopValue ? ref fallToTrueOpt : ref fallToFalseOpt;
2689
var
labEnd = new BasicBlockBuilder(BasicBlockKind.Block);
2704
private IOperation VisitConditionalExpression(IOperation condition, bool sense, int? captureIdForResult,
BasicBlockBuilder
? fallToTrueOpt,
BasicBlockBuilder
? fallToFalseOpt)
2760
private void VisitConditionalBranch(IOperation condition, [NotNull] ref
BasicBlockBuilder
? dest, bool jumpIfTrue)
2775
private void VisitConditionalBranchCore(IOperation condition, [NotNull] ref
BasicBlockBuilder
? dest, bool jumpIfTrue)
2782
void visitConditionalBranchCore(IOperation condition, [NotNull] ref
BasicBlockBuilder
? dest, bool jumpIfTrue)
2796
var stack = ArrayBuilder<(IOperation? condition,
BasicBlockBuilder
dest, bool jumpIfTrue)>.GetInstance();
2801
(IOperation? condition,
BasicBlockBuilder
dest, bool jumpIfTrue) top = stack.Pop();
2816
BasicBlockBuilder
? fallThrough = new BasicBlockBuilder(BasicBlockKind.Block);
2876
BasicBlockBuilder
? whenFalse = null;
2880
var
afterIf = new BasicBlockBuilder(BasicBlockKind.Block);
2899
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
2909
var
afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block);
2964
private void ConditionalBranch(IOperation condition, bool jumpIfTrue,
BasicBlockBuilder
destination)
2966
BasicBlockBuilder
previous = CurrentBasicBlock;
2967
BasicBlockBuilder
.Branch branch = RegularBranch(destination);
2983
private IOperation NullCheckAndConvertCoalesceValue(ICoalesceOperation operation,
BasicBlockBuilder
whenNull)
3053
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
3057
var
afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block);
3126
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
3127
var
afterCoalesce = new BasicBlockBuilder(BasicBlockKind.Block);
3285
private static
BasicBlockBuilder
.Branch RegularBranch(
BasicBlockBuilder
destination)
3287
return new
BasicBlockBuilder
.Branch() { Destination = destination, Kind = ControlFlowBranchSemantics.Regular };
3380
var
whenNull = new BasicBlockBuilder(BasicBlockKind.Block);
3449
var
afterAccess = new BasicBlockBuilder(BasicBlockKind.Block);
3580
var
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
3581
var
@break = GetLabeledOrNewBlock(operation.ExitLabel);
3623
var
start = new BasicBlockBuilder(BasicBlockKind.Block);
3652
var
afterTryCatchFinally = GetLabeledOrNewBlock(operation.ExitLabel);
3695
var
catchBlock = new BasicBlockBuilder(BasicBlockKind.Block);
3708
var
continueDispatchBlock = new BasicBlockBuilder(BasicBlockKind.Block);
3743
var predecessors = ArrayBuilder<
BasicBlockBuilder
>.GetInstance();
3770
var
continueDispatchBlock = new BasicBlockBuilder(BasicBlockKind.Block);
3842
BasicBlockBuilder
current = CurrentBasicBlock;
3867
BasicBlockBuilder
labeled = GetLabeledOrNewBlock(operation);
3878
private
BasicBlockBuilder
GetLabeledOrNewBlock(ILabelSymbol? labelOpt)
3885
BasicBlockBuilder
? labeledBlock;
3889
_labeledBlocks = PooledDictionary<ILabelSymbol,
BasicBlockBuilder
>.GetInstance();
3940
BasicBlockBuilder
current = CurrentBasicBlock;
4087
var
afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4119
var
endOfFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4359
var
afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4401
var
endOfFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4505
var
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
4506
var
@break = GetLabeledOrNewBlock(operation.ExitLabel);
4532
var
afterTryFinally = new BasicBlockBuilder(BasicBlockKind.Block);
4745
BasicBlockBuilder
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
4746
BasicBlockBuilder
? @break = GetLabeledOrNewBlock(operation.ExitLabel);
4747
BasicBlockBuilder
checkConditionBlock = new BasicBlockBuilder(BasicBlockKind.Block);
4748
BasicBlockBuilder
bodyBlock = new BasicBlockBuilder(BasicBlockKind.Block);
4940
var
afterPositiveCheck = new BasicBlockBuilder(BasicBlockKind.Block);
4944
var
whenNotNull = new BasicBlockBuilder(BasicBlockKind.Block);
5051
var
notPositive = new BasicBlockBuilder(BasicBlockKind.Block);
5169
var
whenBothNotNull = new BasicBlockBuilder(BasicBlockKind.Block);
5190
var
notPositive = new BasicBlockBuilder(BasicBlockKind.Block);
5320
BasicBlockBuilder
afterIncrement = new BasicBlockBuilder(BasicBlockKind.Block);
5332
BasicBlockBuilder
whenNotNull = new BasicBlockBuilder(BasicBlockKind.Block);
5475
BasicBlockBuilder
? defaultBody = null; // Adjusted in handleSection
5476
BasicBlockBuilder
@break = GetLabeledOrNewBlock(operation.ExitLabel);
5508
var
body = new BasicBlockBuilder(BasicBlockKind.Block);
5509
var
nextSection = new BasicBlockBuilder(BasicBlockKind.Block);
5524
var
nextCase = new BasicBlockBuilder(BasicBlockKind.Block);
5541
void handleCase(ICaseClauseOperation caseClause,
BasicBlockBuilder
body, [DisallowNull]
BasicBlockBuilder
? nextCase)
5544
BasicBlockBuilder
labeled = GetLabeledOrNewBlock(caseClause.Label);
5705
BasicBlockBuilder
current = CurrentBasicBlock;
5750
var
start = new BasicBlockBuilder(BasicBlockKind.Block);
5755
var
@break = GetLabeledOrNewBlock(operation.ExitLabel);
5763
var
@continue = GetLabeledOrNewBlock(operation.ContinueLabel);
5829
BasicBlockBuilder
? afterInitialization = null;
6822
BasicBlockBuilder
? resultBlock = null;
7775
var
afterSwitch = new BasicBlockBuilder(BasicBlockKind.Block);
7782
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)