Skip to content

Conversation

@tancheng
Copy link
Contributor

Prototyping codegen: #6

  • Generate instructions in JSON
  • Not yet verified its functionality

TODO:

@tancheng tancheng self-assigned this Jun 30, 2025
@tancheng tancheng added the new feature New feature or request label Jun 30, 2025
@tancheng tancheng linked an issue Jun 30, 2025 that may be closed by this pull request
@tancheng
Copy link
Contributor Author

Generated instructions example:

{
  "functions": [
    {
      "CompiledII": 6,
      "RecMII": 4,
      "ResMII": 1,
      "name": "loop_test",
      "operations": [
        {
          "constant_value": "10",
          "mapping_locs": [
            {
              "id": 5,
              "resource": "tile",
              "time_step": 0
            }
          ],
          "name": "neura.constant",
          "operands": [],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.constant"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 5,
              "resource": "tile",
              "time_step": 1
            }
          ],
          "name": "neura.grant_always",
          "operands": [
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "constant_value": "0",
          "mapping_locs": [
            {
              "id": 6,
              "resource": "tile",
              "time_step": 0
            }
          ],
          "name": "neura.constant",
          "operands": [],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.constant"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 6,
              "resource": "tile",
              "time_step": 1
            }
          ],
          "name": "neura.grant_once",
          "operands": [
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "constant_value": "1",
          "mapping_locs": [
            {
              "id": 9,
              "resource": "tile",
              "time_step": 0
            }
          ],
          "name": "neura.constant",
          "operands": [],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.constant"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 9,
              "resource": "tile",
              "time_step": 1
            }
          ],
          "name": "neura.grant_always",
          "operands": [
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "constant_value": "3.000000",
          "mapping_locs": [
            {
              "id": 10,
              "resource": "tile",
              "time_step": 0
            }
          ],
          "name": "neura.constant",
          "operands": [],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.constant"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 10,
              "resource": "tile",
              "time_step": 1
            }
          ],
          "name": "neura.grant_always",
          "operands": [
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "constant_value": "0.000000",
          "mapping_locs": [
            {
              "id": 14,
              "resource": "tile",
              "time_step": 0
            }
          ],
          "name": "neura.constant",
          "operands": [],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.constant"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 14,
              "resource": "tile",
              "time_step": 1
            }
          ],
          "name": "neura.grant_once",
          "operands": [
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.reserve",
          "operands": [],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 19,
              "resource": "link",
              "time_step": 1
            }
          ],
          "name": "neura.data_mov",
          "operands": [
            "neura.grant_once"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 5,
              "resource": "tile",
              "time_step": 2
            }
          ],
          "name": "neura.phi",
          "operands": [
            "neura.data_mov",
            "neura.reserve"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.reserve",
          "operands": [],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 43,
              "resource": "link",
              "time_step": 1
            }
          ],
          "name": "neura.data_mov",
          "operands": [
            "neura.grant_once"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 10,
              "resource": "tile",
              "time_step": 2
            }
          ],
          "name": "neura.phi",
          "operands": [
            "neura.data_mov",
            "neura.reserve"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.phi"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.grant_always"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 10,
              "resource": "tile",
              "time_step": 3
            }
          ],
          "name": "neura.fadd",
          "operands": [
            "neura.data_mov",
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 14,
              "resource": "link",
              "time_step": 2
            }
          ],
          "name": "neura.data_mov",
          "operands": [
            "neura.phi"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.grant_always"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 9,
              "resource": "tile",
              "time_step": 3
            }
          ],
          "name": "neura.add",
          "operands": [
            "neura.data_mov",
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.add"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 15,
              "resource": "link",
              "time_step": 1
            },
            {
              "id": 11,
              "resource": "link",
              "time_step": 2
            },
            {
              "id": 26,
              "resource": "link",
              "time_step": 3
            }
          ],
          "name": "neura.data_mov",
          "operands": [
            "neura.grant_always"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 9,
              "resource": "tile",
              "time_step": 4
            }
          ],
          "name": "neura.icmp",
          "operands": [
            "neura.data_mov",
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<i1, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 27,
              "resource": "link",
              "time_step": 4
            }
          ],
          "name": "neura.data_mov",
          "operands": [
            "neura.icmp"
          ],
          "result_types": [
            "!neura.data<i1, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 5,
              "resource": "tile",
              "time_step": 5
            }
          ],
          "name": "neura.not",
          "operands": [
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<i1, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 31,
              "resource": "link",
              "time_step": 3
            },
            {
              "id": 17,
              "resource": "link",
              "time_step": 4
            },
            {
              "id": 6,
              "resource": "link",
              "time_step": 5
            }
          ],
          "name": "neura.data_mov",
          "operands": [
            "neura.fadd"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 13,
              "resource": "link",
              "time_step": 5
            }
          ],
          "name": "neura.data_mov",
          "operands": [
            "neura.not"
          ],
          "result_types": [
            "!neura.data<i1, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 1,
              "resource": "tile",
              "time_step": 6
            }
          ],
          "name": "neura.grant_predicate",
          "operands": [
            "neura.data_mov",
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.fadd"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 30,
              "resource": "link",
              "time_step": 4
            }
          ],
          "name": "neura.data_mov",
          "operands": [
            "neura.icmp"
          ],
          "result_types": [
            "!neura.data<i1, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 10,
              "resource": "tile",
              "time_step": 5
            }
          ],
          "name": "neura.grant_predicate",
          "operands": [
            "neura.data_mov",
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.ctrl_mov",
          "operands": [
            "neura.grant_predicate",
            "neura.reserve"
          ],
          "result_types": []
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.add"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.icmp"
          ],
          "result_types": [
            "!neura.data<i1, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 9,
              "resource": "tile",
              "time_step": 5
            }
          ],
          "name": "neura.grant_predicate",
          "operands": [
            "neura.data_mov",
            "neura.data_mov"
          ],
          "result_types": [
            "!neura.data<i64, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 27,
              "resource": "link",
              "time_step": 5
            },
            {
              "id": 27,
              "resource": "link",
              "time_step": 6
            },
            {
              "id": 27,
              "resource": "link",
              "time_step": 7
            }
          ],
          "name": "neura.ctrl_mov",
          "operands": [
            "neura.grant_predicate",
            "neura.reserve"
          ],
          "result_types": []
        },
        {
          "mapping_locs": [],
          "name": "neura.data_mov",
          "operands": [
            "neura.grant_predicate"
          ],
          "result_types": [
            "!neura.data<f32, i1>"
          ]
        },
        {
          "mapping_locs": [
            {
              "id": 1,
              "resource": "tile",
              "time_step": 7
            }
          ],
          "name": "neura.return",
          "operands": [
            "neura.data_mov"
          ],
          "result_types": []
        },
        {
          "mapping_locs": [],
          "name": "func.func",
          "operands": [],
          "result_types": []
        }
      ]
    }
  ]
}

@tancheng
Copy link
Contributor Author

The code is actually written by chatgpt, i am just a debugger...

@tancheng tancheng merged commit 1958d02 into main Jun 30, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[P1] Code generation

3 participants