Add initial lowering of a trivial function (#2640)

This is starting to build out actual lowering logic, for a really simple `fn Main() -> i32 { return 0; }`

Notes for achieving this:

- In semantics, currently function names are bound separate from the signature. When emitting IR, this turns out to be inconvenient because we want to know the name when we process the declaration and the definition. This change addresses that by merging the name into the FunctionDeclaration node, which is also accessible from the definition. It removes the separate BindName. This should be the cause of all the test changes in semantics, because the IR generated changes.

- Add a "Lowering" class which I'm using to hold the llvm builder state. This class now has minimal support for the SemanticsIR generated by the above example.

- In the "Lowering", values from expressions are stored in a DenseMap. I'll keep thinking about whether there's a cleaner way to achieve this, and I'd call it a temporary solution for now. However, this is how the `0` in `return 0` gets properly associated across SemanticsIR instructions, and it'll frequently be an issue in less trivial cases.
This commit is contained in:
Jon Ross-Perkins
2023-02-28 11:30:20 -08:00
committed by GitHub
parent 49726cd89e
commit 32e8fee4ad
46 changed files with 570 additions and 341 deletions
@@ -39,30 +39,26 @@
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0},
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node10, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block0},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node15, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node13, type: node2},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node17, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable2},
// CHECK:STDOUT: {kind: BindName, arg0: str4, arg1: node19},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node19, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable3},
// CHECK:STDOUT: {kind: BindName, arg0: str5, arg1: node22},
// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node15, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str4, arg1: callable2},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node17, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str5, arg1: callable3},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int2, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int3, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int4, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int5, type: node2},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node22, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node19, arg1: block0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
// CHECK:STDOUT: [
@@ -70,61 +66,57 @@
// CHECK:STDOUT: [
// CHECK:STDOUT: node7,
// CHECK:STDOUT: node8,
// CHECK:STDOUT: node9,
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node12,
// CHECK:STDOUT: node13,
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node17,
// CHECK:STDOUT: node18,
// CHECK:STDOUT: node19,
// CHECK:STDOUT: node20,
// CHECK:STDOUT: node21,
// CHECK:STDOUT: node22,
// CHECK:STDOUT: node23,
// CHECK:STDOUT: node30,
// CHECK:STDOUT: node26,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node9,
// CHECK:STDOUT: node10,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node10,
// CHECK:STDOUT: node11,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node11,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node13,
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node15,
// CHECK:STDOUT: node16,
// CHECK:STDOUT: node17,
// CHECK:STDOUT: node18,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node16,
// CHECK:STDOUT: node18,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node20,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node20,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node21,
// CHECK:STDOUT: node22,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node21,
// CHECK:STDOUT: node22,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node23,
// CHECK:STDOUT: node24,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node23,
// CHECK:STDOUT: node24,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node25,
// CHECK:STDOUT: node26,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node25,
// CHECK:STDOUT: node26,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node27,
// CHECK:STDOUT: node28,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node27,
// CHECK:STDOUT: node28,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node29,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node29,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -31,13 +31,11 @@
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
// CHECK:STDOUT: {kind: RealLiteral, arg0: real0, type: node3},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
// CHECK:STDOUT: [
@@ -53,15 +51,13 @@
// CHECK:STDOUT: node9,
// CHECK:STDOUT: node10,
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node12,
// CHECK:STDOUT: node13,
// CHECK:STDOUT: node15,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node12,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node12,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -43,22 +43,20 @@
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node13},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str3, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
// CHECK:STDOUT: {kind: BindName, arg0: str4, arg1: node16},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str4, arg1: callable1},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2},
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node18, arg1: node19, type: node2},
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node16, arg1: node17, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int2, type: node2},
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node20, arg1: node21, type: node2},
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node18, arg1: node19, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int3, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int4, type: node2},
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node23, arg1: node24, type: node2},
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node21, arg1: node22, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int5, type: node2},
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node16, arg1: block6},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node15, arg1: block6},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
// CHECK:STDOUT: [
@@ -80,11 +78,11 @@
// CHECK:STDOUT: node13,
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node15,
// CHECK:STDOUT: node16,
// CHECK:STDOUT: node17,
// CHECK:STDOUT: node28,
// CHECK:STDOUT: node26,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node16,
// CHECK:STDOUT: node17,
// CHECK:STDOUT: node18,
// CHECK:STDOUT: node19,
// CHECK:STDOUT: node20,
@@ -92,16 +90,14 @@
// CHECK:STDOUT: node22,
// CHECK:STDOUT: node23,
// CHECK:STDOUT: node24,
// CHECK:STDOUT: node25,
// CHECK:STDOUT: node26,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node22,
// CHECK:STDOUT: node25,
// CHECK:STDOUT: node26,
// CHECK:STDOUT: node20,
// CHECK:STDOUT: node23,
// CHECK:STDOUT: node24,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node27,
// CHECK:STDOUT: node25,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
+11 -15
View File
@@ -32,14 +32,12 @@
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block6},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block6},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
// CHECK:STDOUT: [
@@ -55,18 +53,16 @@
// CHECK:STDOUT: node9,
// CHECK:STDOUT: node10,
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node14,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node12,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node12,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node13,
// CHECK:STDOUT: node16,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node14,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node14,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node15,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -34,16 +34,14 @@
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2},
// CHECK:STDOUT: {kind: Call, arg0: call1, arg1: callable0, type: node6},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block6},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block6},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
// CHECK:STDOUT: [
@@ -59,25 +57,23 @@
// CHECK:STDOUT: node9,
// CHECK:STDOUT: node10,
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node16,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node12,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node12,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node13,
// CHECK:STDOUT: node18,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node14,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node14,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node15,
// CHECK:STDOUT: node17,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node16,
// CHECK:STDOUT: node14,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node16,
// CHECK:STDOUT: node14,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
+10 -14
View File
@@ -36,15 +36,13 @@
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node14},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str3, arg1: callable1},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2},
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node14, arg1: block6},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block6},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
// CHECK:STDOUT: [
@@ -63,20 +61,18 @@
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node12,
// CHECK:STDOUT: node13,
// CHECK:STDOUT: node17,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node15,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node15,
// CHECK:STDOUT: node19,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node16,
// CHECK:STDOUT: node17,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node16,
// CHECK:STDOUT: node17,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node18,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -39,18 +39,16 @@
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node14},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str3, arg1: callable1},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2},
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int2, type: node2},
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int3, type: node2},
// CHECK:STDOUT: {kind: Call, arg0: call1, arg1: callable0, type: node6},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node14, arg1: block6},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block6},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
// CHECK:STDOUT: [
@@ -69,29 +67,27 @@
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node12,
// CHECK:STDOUT: node13,
// CHECK:STDOUT: node20,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node15,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node15,
// CHECK:STDOUT: node22,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node16,
// CHECK:STDOUT: node17,
// CHECK:STDOUT: node19,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node16,
// CHECK:STDOUT: node17,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node18,
// CHECK:STDOUT: node21,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node19,
// CHECK:STDOUT: node20,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node19,
// CHECK:STDOUT: node20,
// CHECK:STDOUT: node17,
// CHECK:STDOUT: node18,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -28,13 +28,11 @@
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0},
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node10},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable1},
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node10, arg1: block2},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block2},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
// CHECK:STDOUT: [
@@ -43,12 +41,10 @@
// CHECK:STDOUT: node7,
// CHECK:STDOUT: node8,
// CHECK:STDOUT: node9,
// CHECK:STDOUT: node10,
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node13,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node12,
// CHECK:STDOUT: node10,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -30,8 +30,7 @@
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node9, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node11},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
@@ -50,7 +49,6 @@
// CHECK:STDOUT: [
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node12,
// CHECK:STDOUT: node13,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -29,15 +29,12 @@
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0},
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node10},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node10, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable2},
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node13},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable1},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable2},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
// CHECK:STDOUT: [
@@ -49,9 +46,6 @@
// CHECK:STDOUT: node10,
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node12,
// CHECK:STDOUT: node13,
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node15,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -28,8 +28,7 @@
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
@@ -45,7 +44,6 @@
// CHECK:STDOUT: [
// CHECK:STDOUT: node9,
// CHECK:STDOUT: node10,
// CHECK:STDOUT: node11,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -28,8 +28,7 @@
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
@@ -45,7 +44,6 @@
// CHECK:STDOUT: [
// CHECK:STDOUT: node9,
// CHECK:STDOUT: node10,
// CHECK:STDOUT: node11,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -31,8 +31,7 @@
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
@@ -51,7 +50,6 @@
// CHECK:STDOUT: [
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node12,
// CHECK:STDOUT: node13,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -31,8 +31,7 @@
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
@@ -51,7 +50,6 @@
// CHECK:STDOUT: [
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node12,
// CHECK:STDOUT: node13,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -25,8 +25,7 @@
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0},
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
@@ -35,7 +34,6 @@
// CHECK:STDOUT: [
// CHECK:STDOUT: node7,
// CHECK:STDOUT: node8,
// CHECK:STDOUT: node9,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]
@@ -30,14 +30,12 @@
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
// CHECK:STDOUT: {kind: VarStorage, type: node2},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node12, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node14},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node14, arg1: block0},
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node11, type: node2},
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block0},
// CHECK:STDOUT: ]
// CHECK:STDOUT: node_blocks: [
// CHECK:STDOUT: [
@@ -52,17 +50,15 @@
// CHECK:STDOUT: [
// CHECK:STDOUT: node9,
// CHECK:STDOUT: node10,
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node13,
// CHECK:STDOUT: node14,
// CHECK:STDOUT: node15,
// CHECK:STDOUT: node16,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node11,
// CHECK:STDOUT: node12,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node12,
// CHECK:STDOUT: node13,
// CHECK:STDOUT: ],
// CHECK:STDOUT: [
// CHECK:STDOUT: node13,
// CHECK:STDOUT: ],
// CHECK:STDOUT: ]