Lowering of Branch / BranchIf / BranchWithArg / BlockArg. (#2904)

This gives us complete lowering of `if` expressions plus `and` and `or`.

Co-authored-by: Jon Ross-Perkins <jperkins@google.com>
This commit is contained in:
Richard Smith
2023-06-15 17:53:07 -07:00
committed by GitHub
co-authored by Jon Ross-Perkins
parent c27f41c94b
commit 0d4d392d12
44 changed files with 453 additions and 91 deletions
+1 -1
View File
@@ -35,7 +35,7 @@
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node+4, arg1: node+2, type: type1},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block7, arg1: node+9},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block7, arg1: node+10},
// CHECK:STDOUT: {kind: BlockArg, type: type1},
// CHECK:STDOUT: {kind: BlockArg, arg0: block7, type: type1},
// CHECK:STDOUT: {kind: ReturnExpression, arg0: node+13, type: type1},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
@@ -41,7 +41,7 @@
// CHECK:STDOUT: {kind: Call, arg0: block0, arg1: function1, type: type0},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block7, arg1: node+10},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block7, arg1: node+11},
// CHECK:STDOUT: {kind: BlockArg, type: type0},
// CHECK:STDOUT: {kind: BlockArg, arg0: block7, type: type0},
// CHECK:STDOUT: {kind: ReturnExpression, arg0: node+14, type: type0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function3},
// CHECK:STDOUT: {kind: BoolLiteral, arg0: false, type: type1},
@@ -51,7 +51,7 @@
// CHECK:STDOUT: {kind: Call, arg0: block0, arg1: function1, type: type0},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block11, arg1: node+20},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block11, arg1: node+21},
// CHECK:STDOUT: {kind: BlockArg, type: type0},
// CHECK:STDOUT: {kind: BlockArg, arg0: block11, type: type0},
// CHECK:STDOUT: {kind: ReturnExpression, arg0: node+24, type: type0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
@@ -41,7 +41,7 @@
// CHECK:STDOUT: {kind: Call, arg0: block0, arg1: function1, type: type0},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block9, arg1: node+11},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block9, arg1: node+12},
// CHECK:STDOUT: {kind: BlockArg, type: type0},
// CHECK:STDOUT: {kind: BlockArg, arg0: block9, type: type0},
// CHECK:STDOUT: {kind: ReturnExpression, arg0: node+15, type: type0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
+3 -3
View File
@@ -41,17 +41,17 @@
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: type1},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block9, arg1: node+11},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block9, arg1: node+12},
// CHECK:STDOUT: {kind: BlockArg, type: type1},
// CHECK:STDOUT: {kind: BlockArg, arg0: block9, type: type1},
// CHECK:STDOUT: {kind: BranchIf, arg0: block11, arg1: node+4},
// CHECK:STDOUT: {kind: Branch, arg0: block10},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int2, type: type1},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int3, type: type1},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block12, arg1: node+18},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block12, arg1: node+19},
// CHECK:STDOUT: {kind: BlockArg, type: type1},
// CHECK:STDOUT: {kind: BlockArg, arg0: block12, type: type1},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block13, arg1: node+15},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block13, arg1: node+22},
// CHECK:STDOUT: {kind: BlockArg, type: type1},
// CHECK:STDOUT: {kind: BlockArg, arg0: block13, type: type1},
// CHECK:STDOUT: {kind: ReturnExpression, arg0: node+25, type: type1},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
+1 -1
View File
@@ -35,7 +35,7 @@
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block5, arg1: node+8},
// CHECK:STDOUT: {kind: Call, arg0: block0, arg1: function1, type: type0},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block5, arg1: node+11},
// CHECK:STDOUT: {kind: BlockArg, type: type0},
// CHECK:STDOUT: {kind: BlockArg, arg0: block5, type: type0},
// CHECK:STDOUT: {kind: ReturnExpression, arg0: node+13, type: type0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
+1 -1
View File
@@ -36,7 +36,7 @@
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block5, arg1: node+9},
// CHECK:STDOUT: {kind: Call, arg0: block0, arg1: function1, type: type0},
// CHECK:STDOUT: {kind: BranchWithArg, arg0: block5, arg1: node+12},
// CHECK:STDOUT: {kind: BlockArg, type: type0},
// CHECK:STDOUT: {kind: BlockArg, arg0: block5, type: type0},
// CHECK:STDOUT: {kind: ReturnExpression, arg0: node+14, type: type0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [