{
  "type": "excalidraw",
  "version": 2,
  "source": "https://excalidraw.com",
  "elements": [
    {
      "id": "mlir_86",
      "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": 17086,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "MLIR Lowering 到 GPU 和 LLVM 的主路径",
      "fontSize": 28,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "MLIR Lowering 到 GPU 和 LLVM 的主路径",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_87",
      "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": 17087,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Lowering 是基于合法性目标的逐步转换，不是一次性把文本改成 LLVM IR",
      "fontSize": 18,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Lowering 是基于合法性目标的逐步转换，不是一次性把文本改成 LLVM IR",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_88",
      "type": "rectangle",
      "x": 55,
      "y": 185,
      "width": 185,
      "height": 150,
      "angle": 0,
      "strokeColor": "#3b82f6",
      "backgroundColor": "#a5d8ff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17088,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_89",
      "type": "text",
      "x": 67,
      "y": 195,
      "width": 161,
      "height": 130,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17089,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "前端 Dialect\n\ntorch / tf / stablehlo\n或自定义 DSL",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "前端 Dialect\n\ntorch / tf / stablehlo\n或自定义 DSL",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_90",
      "type": "arrow",
      "x": 240,
      "y": 260,
      "width": 33,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17090,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          33,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_91",
      "type": "rectangle",
      "x": 273,
      "y": 185,
      "width": 185,
      "height": 150,
      "angle": 0,
      "strokeColor": "#3b82f6",
      "backgroundColor": "#b2f2bb",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17091,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_92",
      "type": "text",
      "x": 285,
      "y": 195,
      "width": 161,
      "height": 130,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17092,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "结构化算子\n\nlinalg / tensor / arith\n保留计算语义",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "结构化算子\n\nlinalg / tensor / arith\n保留计算语义",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_93",
      "type": "arrow",
      "x": 458,
      "y": 260,
      "width": 33,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17093,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          33,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_94",
      "type": "rectangle",
      "x": 491,
      "y": 185,
      "width": 185,
      "height": 150,
      "angle": 0,
      "strokeColor": "#3b82f6",
      "backgroundColor": "#ffd8a8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17094,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_95",
      "type": "text",
      "x": 503,
      "y": 195,
      "width": 161,
      "height": 130,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17095,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "内存化\n\nbufferization -> memref\ntensor value 到 buffer",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "内存化\n\nbufferization -> memref\ntensor value 到 buffer",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_96",
      "type": "arrow",
      "x": 676,
      "y": 260,
      "width": 33,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17096,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          33,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_97",
      "type": "rectangle",
      "x": 709,
      "y": 185,
      "width": 185,
      "height": 150,
      "angle": 0,
      "strokeColor": "#3b82f6",
      "backgroundColor": "#d0bfff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17097,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_98",
      "type": "text",
      "x": 721,
      "y": 195,
      "width": 161,
      "height": 130,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17098,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "循环与向量\n\nscf / affine / vector\ntiling / fusion / vectorize",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "循环与向量\n\nscf / affine / vector\ntiling / fusion / vectorize",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_99",
      "type": "arrow",
      "x": 894,
      "y": 260,
      "width": 33,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17099,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          33,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_100",
      "type": "rectangle",
      "x": 927,
      "y": 185,
      "width": 185,
      "height": 150,
      "angle": 0,
      "strokeColor": "#3b82f6",
      "backgroundColor": "#ffc9c9",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17100,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_101",
      "type": "text",
      "x": 939,
      "y": 195,
      "width": 161,
      "height": 130,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17101,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "GPU 目标\n\ngpu / nvgpu / nvvm\nlaunch / thread / intrinsic",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "GPU 目标\n\ngpu / nvgpu / nvvm\nlaunch / thread / intrinsic",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_102",
      "type": "arrow",
      "x": 1112,
      "y": 260,
      "width": 33,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17102,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          33,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_103",
      "type": "rectangle",
      "x": 1145,
      "y": 185,
      "width": 185,
      "height": 150,
      "angle": 0,
      "strokeColor": "#3b82f6",
      "backgroundColor": "#c3fae8",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17103,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_104",
      "type": "text",
      "x": 1157,
      "y": 195,
      "width": 161,
      "height": 130,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17104,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "底层出口\n\nllvm dialect\nLLVM IR / PTX / object",
      "fontSize": 16,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "底层出口\n\nllvm dialect\nLLVM IR / PTX / object",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_105",
      "type": "rectangle",
      "x": 90,
      "y": 420,
      "width": 530,
      "height": 210,
      "angle": 0,
      "strokeColor": "#748ffc",
      "backgroundColor": "#edf2ff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 40,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17105,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_106",
      "type": "text",
      "x": 130,
      "y": 445,
      "width": 450,
      "height": 28,
      "angle": 0,
      "strokeColor": "#1e40af",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17106,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "Dialect Conversion 三件套",
      "fontSize": 22,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "Dialect Conversion 三件套",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_107",
      "type": "rectangle",
      "x": 130,
      "y": 500,
      "width": 410,
      "height": 42,
      "angle": 0,
      "strokeColor": "#748ffc",
      "backgroundColor": "#ffffff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17107,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_108",
      "type": "text",
      "x": 142,
      "y": 510,
      "width": 386,
      "height": 22,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17108,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "ConversionTarget\n定义 legal / illegal / dynamic legal",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "ConversionTarget\n定义 legal / illegal / dynamic legal",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_109",
      "type": "rectangle",
      "x": 130,
      "y": 555,
      "width": 410,
      "height": 42,
      "angle": 0,
      "strokeColor": "#748ffc",
      "backgroundColor": "#ffffff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17109,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_110",
      "type": "text",
      "x": 142,
      "y": 565,
      "width": 386,
      "height": 22,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17110,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "ConversionPattern\n把非法 op 改写成目标合法 op",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "ConversionPattern\n把非法 op 改写成目标合法 op",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_111",
      "type": "rectangle",
      "x": 130,
      "y": 610,
      "width": 410,
      "height": 42,
      "angle": 0,
      "strokeColor": "#748ffc",
      "backgroundColor": "#ffffff",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17111,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_112",
      "type": "text",
      "x": 142,
      "y": 620,
      "width": 386,
      "height": 22,
      "angle": 0,
      "strokeColor": "#1f2937",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17112,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "TypeConverter\n处理 tensor/memref/index/llvm type 等类型变化",
      "fontSize": 17,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "TypeConverter\n处理 tensor/memref/index/llvm type 等类型变化",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_113",
      "type": "rectangle",
      "x": 760,
      "y": 420,
      "width": 520,
      "height": 210,
      "angle": 0,
      "strokeColor": "#69db7c",
      "backgroundColor": "#ebfbee",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 40,
      "groupIds": [],
      "roundness": {
        "type": 3
      },
      "seed": 17113,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false
    },
    {
      "id": "mlir_114",
      "type": "text",
      "x": 800,
      "y": 445,
      "width": 440,
      "height": 28,
      "angle": 0,
      "strokeColor": "#1e40af",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17114,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "学习时要能回答",
      "fontSize": 22,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "学习时要能回答",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_115",
      "type": "text",
      "x": 810,
      "y": 495,
      "width": 420,
      "height": 110,
      "angle": 0,
      "strokeColor": "#374151",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17115,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "1. 当前 op 为什么还需要保留高层语义？\n2. 目标 dialect 的合法边界是什么？\n3. 类型变化后 uses 如何保持安全？\n4. pass 前后 IR 是否通过 verifier？",
      "fontSize": 18,
      "fontFamily": 5,
      "textAlign": "left",
      "verticalAlign": "top",
      "containerId": null,
      "originalText": "1. 当前 op 为什么还需要保留高层语义？\n2. 目标 dialect 的合法边界是什么？\n3. 类型变化后 uses 如何保持安全？\n4. pass 前后 IR 是否通过 verifier？",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "mlir_116",
      "type": "arrow",
      "x": 565,
      "y": 595,
      "width": 195,
      "height": 0,
      "angle": 0,
      "strokeColor": "#495057",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "dashed",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17116,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "endArrowhead": "arrow",
      "startArrowhead": null,
      "points": [
        [
          0,
          0
        ],
        [
          195,
          0
        ]
      ],
      "lastCommittedPoint": null,
      "startBinding": null,
      "endBinding": null
    },
    {
      "id": "mlir_117",
      "type": "text",
      "x": 185,
      "y": 685,
      "width": 1030,
      "height": 34,
      "angle": 0,
      "strokeColor": "#c2410c",
      "backgroundColor": "transparent",
      "fillStyle": "solid",
      "strokeWidth": 2,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "groupIds": [],
      "roundness": null,
      "seed": 17117,
      "version": 1,
      "isDeleted": false,
      "boundElements": null,
      "updated": 1,
      "link": null,
      "locked": false,
      "text": "lowering 调试重点：合法性失败通常比 C++ 崩溃更有信息量，先读 IR 和 conversion debug 输出。",
      "fontSize": 18,
      "fontFamily": 5,
      "textAlign": "center",
      "verticalAlign": "middle",
      "containerId": null,
      "originalText": "lowering 调试重点：合法性失败通常比 C++ 崩溃更有信息量，先读 IR 和 conversion debug 输出。",
      "autoResize": false,
      "lineHeight": 1.25
    },
    {
      "id": "practice-interview-panel-mlir-lowering到gpu-llvm路径-bg",
      "type": "rectangle",
      "x": 80,
      "y": 799.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-lowering到gpu-llvm路径-title",
      "type": "text",
      "x": 108,
      "y": 821.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-lowering到gpu-llvm路径-practice-box",
      "type": "rectangle",
      "x": 108,
      "y": 877.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-lowering到gpu-llvm路径-practice-text",
      "type": "text",
      "x": 130,
      "y": 897.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-lowering到gpu-llvm路径-interview-box",
      "type": "rectangle",
      "x": 734.0,
      "y": 877.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-lowering到gpu-llvm路径-interview-text",
      "type": "text",
      "x": 756.0,
      "y": 897.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": {}
}