Skip to content

Commit 52509fb

Browse files
authored
Added chapter 8 docs (#59)
-Fixed chapter 7 to remove manual PHI nodes in conditional expressions. - Prepared for chapter 9 docs
1 parent f0c6fad commit 52509fb

File tree

18 files changed

+675
-159
lines changed

18 files changed

+675
-159
lines changed

Samples/Kaleidoscope/Chapter6/CodeGenerator.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public override Value VisitConditionalExpression( [NotNull] ConditionalExpressio
158158

159159
var thenBlock = Context.CreateBasicBlock( "then", function );
160160
var elseBlock = Context.CreateBasicBlock( "else" );
161-
var phiMergeBlock = Context.CreateBasicBlock( "ifcont" );
161+
var continueBlock = Context.CreateBasicBlock( "ifcont" );
162162
InstructionBuilder.Branch( condBool, thenBlock, elseBlock );
163163

164164
// generate then block
@@ -169,7 +169,7 @@ public override Value VisitConditionalExpression( [NotNull] ConditionalExpressio
169169
return null;
170170
}
171171

172-
InstructionBuilder.Branch( phiMergeBlock );
172+
InstructionBuilder.Branch( continueBlock );
173173

174174
// capture the insert in case generating else adds new blocks
175175
thenBlock = InstructionBuilder.InsertBlock;
@@ -183,12 +183,12 @@ public override Value VisitConditionalExpression( [NotNull] ConditionalExpressio
183183
return null;
184184
}
185185

186-
InstructionBuilder.Branch( phiMergeBlock );
186+
InstructionBuilder.Branch( continueBlock );
187187
elseBlock = InstructionBuilder.InsertBlock;
188188

189-
// generate PHI merge block
190-
function.BasicBlocks.Add( phiMergeBlock );
191-
InstructionBuilder.PositionAtEnd( phiMergeBlock );
189+
// generate continue block
190+
function.BasicBlocks.Add( continueBlock );
191+
InstructionBuilder.PositionAtEnd( continueBlock );
192192
var phiNode = InstructionBuilder.PhiNode( function.Context.DoubleType )
193193
.RegisterName( "iftmp" );
194194

Samples/Kaleidoscope/Chapter7/Chapter7.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
<LangVersion>latest</LangVersion>
88
</PropertyGroup>
99

10+
<ItemGroup>
11+
<None Include="fibi.kls">
12+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
13+
</None>
14+
</ItemGroup>
15+
1016
<ItemGroup>
1117
<ProjectReference Include="$(BuildRootDir)src\Llvm.NET\Llvm.NET.csproj">
1218
<Name>Llvm.NET</Name>

Samples/Kaleidoscope/Chapter7/CodeGenerator.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ public override Value VisitExpression( [NotNull] ExpressionContext context )
170170
// <VisitConditionalExpression>
171171
public override Value VisitConditionalExpression( [NotNull] ConditionalExpressionContext context )
172172
{
173+
var result = CreateEntryBlockAlloca( InstructionBuilder.InsertBlock.ContainingFunction, "ifresult.alloca" );
174+
173175
var condition = context.Condition.Accept( this );
174176
if( condition == null )
175177
{
@@ -183,7 +185,7 @@ public override Value VisitConditionalExpression( [NotNull] ConditionalExpressio
183185

184186
var thenBlock = Context.CreateBasicBlock( "then", function );
185187
var elseBlock = Context.CreateBasicBlock( "else" );
186-
var phiMergeBlock = Context.CreateBasicBlock( "ifcont" );
188+
var continueBlock = Context.CreateBasicBlock( "ifcont" );
187189
InstructionBuilder.Branch( condBool, thenBlock, elseBlock );
188190

189191
// generate then block
@@ -194,7 +196,8 @@ public override Value VisitConditionalExpression( [NotNull] ConditionalExpressio
194196
return null;
195197
}
196198

197-
InstructionBuilder.Branch( phiMergeBlock );
199+
InstructionBuilder.Store( thenValue, result );
200+
InstructionBuilder.Branch( continueBlock );
198201

199202
// capture the insert in case generating else adds new blocks
200203
thenBlock = InstructionBuilder.InsertBlock;
@@ -208,18 +211,15 @@ public override Value VisitConditionalExpression( [NotNull] ConditionalExpressio
208211
return null;
209212
}
210213

211-
InstructionBuilder.Branch( phiMergeBlock );
214+
InstructionBuilder.Store( elseValue, result );
215+
InstructionBuilder.Branch( continueBlock );
212216
elseBlock = InstructionBuilder.InsertBlock;
213217

214-
// generate PHI merge block
215-
function.BasicBlocks.Add( phiMergeBlock );
216-
InstructionBuilder.PositionAtEnd( phiMergeBlock );
217-
var phiNode = InstructionBuilder.PhiNode( function.Context.DoubleType )
218-
.RegisterName( "iftmp" );
219-
220-
phiNode.AddIncoming( thenValue, thenBlock );
221-
phiNode.AddIncoming( elseValue, elseBlock );
222-
return phiNode;
218+
// generate continue block
219+
function.BasicBlocks.Add( continueBlock );
220+
InstructionBuilder.PositionAtEnd( continueBlock );
221+
return InstructionBuilder.Load( result )
222+
.RegisterName("ifresult");
223223
}
224224
// </VisitConditionalExpression>
225225

Samples/Kaleidoscope/Chapter8/Chapter8.csproj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
<RootNamespace>Kaleidoscope</RootNamespace>
77
<LangVersion>latest</LangVersion>
88
</PropertyGroup>
9-
9+
<ItemGroup>
10+
<Content Include="..\mandel.kls" Link="mandel.kls">
11+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
12+
</Content>
13+
</ItemGroup>
1014
<ItemGroup>
1115
<ProjectReference Include="$(BuildRootDir)src\Llvm.NET\Llvm.NET.csproj">
1216
<Name>Llvm.NET</Name>

0 commit comments

Comments
 (0)