{
  "type": "excalidraw",
  "version": 2,
  "source": "https://excalidraw.com",
  "elements": [
    {
      "id": "mlir_0",
      "type": "text",
      "x": 90,
      "y": 24,
      "width": 1220,
      "height": 36,
      "angle": 0,
      "strokeColor": "#1e40af",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17000,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "MLIR 入门学习路线总览",
      "fontSize": 28,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "MLIR 入门学习路线总览",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_1",
      "type": "text",
      "x": 90,
      "y": 68,
      "width": 1220,
      "height": 28,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17001,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "目标：读懂 IR -> 会跑 mlir-opt -> 写 pass/rewrite -> 自定义 dialect -> 理解 lowering 到 LLVM/GPU",
      "fontSize": 18,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "目标：读懂 IR -> 会跑 mlir-opt -> 写 pass/rewrite -> 自定义 dialect -> 理解 lowering 到 LLVM/GPU",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_2",
      "type": "rectangle",
      "x": 40,
      "y": 120,
      "width": 1320,
      "height": 600,
      "angle": 0,
      "strokeColor": "#748ffc",
      "backgroundColor": "#edf2ff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 35,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17002,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_3",
      "type": "rectangle",
      "x": 70,
      "y": 170,
      "width": 220,
      "height": 210,
      "angle": 0,
      "strokeColor": "#3b82f6",
      "backgroundColor": "#a5d8ff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17003,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_4",
      "type": "text",
      "x": 82,
      "y": 180,
      "width": 196,
      "height": 190,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17004,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "0. 环境与工具\n\n构建 llvm-project\nmlir-opt / mlir-translate\nmlir-tblgen / FileCheck",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "0. 环境与工具\n\n构建 llvm-project\nmlir-opt / mlir-translate\nmlir-tblgen / FileCheck",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_5",
      "type": "arrow",
      "x": 290,
      "y": 275,
      "width": 32,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17005,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          32,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_6",
      "type": "rectangle",
      "x": 322,
      "y": 170,
      "width": 220,
      "height": 210,
      "angle": 0,
      "strokeColor": "#3b82f6",
      "backgroundColor": "#b2f2bb",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17006,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_7",
      "type": "text",
      "x": 334,
      "y": 180,
      "width": 196,
      "height": 190,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17007,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "1. IR 心智模型\n\nOperation / Value\nRegion / Block\nType / Attribute / Location",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "1. IR 心智模型\n\nOperation / Value\nRegion / Block\nType / Attribute / Location",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_8",
      "type": "arrow",
      "x": 542,
      "y": 275,
      "width": 32,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17008,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          32,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_9",
      "type": "rectangle",
      "x": 574,
      "y": 170,
      "width": 220,
      "height": 210,
      "angle": 0,
      "strokeColor": "#3b82f6",
      "backgroundColor": "#ffd8a8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17009,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_10",
      "type": "text",
      "x": 586,
      "y": 180,
      "width": 196,
      "height": 190,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17010,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "2. Dialect 与 ODS\n\n命名空间和语义边界\nTableGen 描述 op\ntraits / interfaces / verifier",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "2. Dialect 与 ODS\n\n命名空间和语义边界\nTableGen 描述 op\ntraits / interfaces / verifier",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_11",
      "type": "arrow",
      "x": 794,
      "y": 275,
      "width": 32,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17011,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          32,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_12",
      "type": "rectangle",
      "x": 826,
      "y": 170,
      "width": 220,
      "height": 210,
      "angle": 0,
      "strokeColor": "#3b82f6",
      "backgroundColor": "#d0bfff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17012,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_13",
      "type": "text",
      "x": 838,
      "y": 180,
      "width": 196,
      "height": 190,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17013,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "3. Pass 与 Rewrite\n\nPassManager pipeline\nPatternRewriter\ncanonicalize / cse / FileCheck",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "3. Pass 与 Rewrite\n\nPassManager pipeline\nPatternRewriter\ncanonicalize / cse / FileCheck",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_14",
      "type": "arrow",
      "x": 1046,
      "y": 275,
      "width": 32,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17014,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          32,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_15",
      "type": "rectangle",
      "x": 1078,
      "y": 170,
      "width": 220,
      "height": 210,
      "angle": 0,
      "strokeColor": "#3b82f6",
      "backgroundColor": "#c3fae8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17015,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_16",
      "type": "text",
      "x": 1090,
      "y": 180,
      "width": 196,
      "height": 190,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17016,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "4. Lowering 主线\n\nConversionTarget\nTypeConverter\nlinalg -> memref/vector/gpu/llvm",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "4. Lowering 主线\n\nConversionTarget\nTypeConverter\nlinalg -> memref/vector/gpu/llvm",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_17",
      "type": "rectangle",
      "x": 100,
      "y": 455,
      "width": 265,
      "height": 120,
      "angle": 0,
      "strokeColor": "#f59f00",
      "backgroundColor": "#fff3bf",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17017,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_18",
      "type": "text",
      "x": 112,
      "y": 465,
      "width": 241,
      "height": 100,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17018,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "第 1 周\n读 IR + 跑工具\n验收：能解释 def-use",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "第 1 周\n读 IR + 跑工具\n验收：能解释 def-use",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_19",
      "type": "arrow",
      "x": 365,
      "y": 515,
      "width": 50,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17019,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          50,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_20",
      "type": "rectangle",
      "x": 415,
      "y": 455,
      "width": 265,
      "height": 120,
      "angle": 0,
      "strokeColor": "#f59f00",
      "backgroundColor": "#fff3bf",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17020,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_21",
      "type": "text",
      "x": 427,
      "y": 465,
      "width": 241,
      "height": 100,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17021,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "第 2 周\n跟 Toy Tutorial\n验收：能写一个 ODS op",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "第 2 周\n跟 Toy Tutorial\n验收：能写一个 ODS op",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_22",
      "type": "arrow",
      "x": 680,
      "y": 515,
      "width": 50,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17022,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          50,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_23",
      "type": "rectangle",
      "x": 730,
      "y": 455,
      "width": 265,
      "height": 120,
      "angle": 0,
      "strokeColor": "#f59f00",
      "backgroundColor": "#fff3bf",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17023,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_24",
      "type": "text",
      "x": 742,
      "y": 465,
      "width": 241,
      "height": 100,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17024,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "第 3 周\n写 pass/rewrite\n验收：有 FileCheck 测试",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "第 3 周\n写 pass/rewrite\n验收：有 FileCheck 测试",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_25",
      "type": "arrow",
      "x": 995,
      "y": 515,
      "width": 50,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17025,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          50,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_26",
      "type": "rectangle",
      "x": 1045,
      "y": 455,
      "width": 265,
      "height": 120,
      "angle": 0,
      "strokeColor": "#f59f00",
      "backgroundColor": "#fff3bf",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17026,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_27",
      "type": "text",
      "x": 1057,
      "y": 465,
      "width": 241,
      "height": 100,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17027,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "第 4 周\n做小 lowering\n验收：source dialect 到 target dialect",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "第 4 周\n做小 lowering\n验收：source dialect 到 target dialect",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_28",
      "type": "rectangle",
      "x": 310,
      "y": 620,
      "width": 780,
      "height": 78,
      "angle": 0,
      "strokeColor": "#ae3ec9",
      "backgroundColor": "#eebefa",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17028,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_29",
      "type": "text",
      "x": 322,
      "y": 630,
      "width": 756,
      "height": 58,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17029,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "最终小项目：极简 tensor DSL dialect\nmydsl.add / relu / matmul -> linalg / arith\n讲得清：为什么保留高层语义，为什么逐步 lowering",
      "fontSize": 18,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "最终小项目：极简 tensor DSL dialect\nmydsl.add / relu / matmul -> linalg / arith\n讲得清：为什么保留高层语义，为什么逐步 lowering",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "practice-interview-panel-mlir-学习路线-总览-bg",
      "type": "rectangle",
      "x": 80,
      "y": 800.0,
      "width": 1280,
      "height": 300,
      "angle": 0,
      "strokeColor": "#64748b",
      "backgroundColor": "#e2e8f0",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 70,
      "groupIds": [],
      "seed": 93001,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "roundness": {
        "type": 3
      }
    },
    {
      "id": "practice-interview-panel-mlir-学习路线-总览-title",
      "type": "text",
      "x": 108,
      "y": 822.0,
      "width": 1224,
      "height": 38,
      "angle": 0,
      "strokeColor": "#1e40af",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 91001,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "练习题与面试题补充：MLIR compiler stack",
      "fontSize": 24,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "top",
      "containerId": null,
      "originalText": "练习题与面试题补充：MLIR compiler stack",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "practice-interview-panel-mlir-学习路线-总览-practice-box",
      "type": "rectangle",
      "x": 108,
      "y": 878.0,
      "width": 598.0,
      "height": 190,
      "angle": 0,
      "strokeColor": "#2563eb",
      "backgroundColor": "#bfdbfe",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 93002,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "roundness": {
        "type": 3
      }
    },
    {
      "id": "practice-interview-panel-mlir-学习路线-总览-practice-text",
      "type": "text",
      "x": 130,
      "y": 898.0,
      "width": 575.0,
      "height": 150,
      "angle": 0,
      "strokeColor": "#243042",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 91001,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "练习题\n1. 写一个 toy op 的 verifier 和 canonicalization\n2. 用 FileCheck 验证一个 lowering pass 的前后 IR\n3. 画出 source dialect 到 linalg/gpu/llvm 的合法化边界",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "top",
      "containerId": null,
      "originalText": "练习题\n1. 写一个 toy op 的 verifier 和 canonicalization\n2. 用 FileCheck 验证一个 lowering pass 的前后 IR\n3. 画出 source dialect 到 linalg/gpu/llvm 的合法化边界",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "practice-interview-panel-mlir-学习路线-总览-interview-box",
      "type": "rectangle",
      "x": 734.0,
      "y": 878.0,
      "width": 598.0,
      "height": 190,
      "angle": 0,
      "strokeColor": "#7c3aed",
      "backgroundColor": "#ddd6fe",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 93003,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "roundness": {
        "type": 3
      }
    },
    {
      "id": "practice-interview-panel-mlir-学习路线-总览-interview-text",
      "type": "text",
      "x": 756.0,
      "y": 898.0,
      "width": 575.0,
      "height": 150,
      "angle": 0,
      "strokeColor": "#243042",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "seed": 91001,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "面试题\n1. Dialect、Operation、Region、Block、Value 如何组织 IR\n2. PatternRewrite 和 DialectConversion 的区别是什么\n3. 为什么 lowering 要分阶段保留语义",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "top",
      "containerId": null,
      "originalText": "面试题\n1. Dialect、Operation、Region、Block、Value 如何组织 IR\n2. PatternRewrite 和 DialectConversion 的区别是什么\n3. 为什么 lowering 要分阶段保留语义",
      "autoResize": false,
      "lineHeight": 1.25
    }
  ],
  "appState": {
    "gridSize": null,
    "viewBackgroundColor": "#ffffff"
  },
  "files": {}
}