struct类型重定义 不同的基类型_MLIR向源语言添加struct类型

b260cfd11e7638ec6a568f43a6843b49.png
上一篇文章示范了从混合Dialect的MLIR表达式Lowering到LLVM IR Dialect的MLIR表达式,并且最终输出LLVM IR表达式,同时也可以使用JIT编译引擎来执行。至此已经实现了完整的编译流程,本文将会介绍MLIR如何扩展源语言。

前面的一系列文章中源语言都只用了简单的数据类型,在对整个编译流程有了认识之后,本文介绍向源语言中添加较为复杂的数据类型:struct结构体。在Toy语言中,结构体的定义以及使用方式如下图所示:

e4728736a969b19b26b4bd5599bfb30f.png

本文将会继续使用之前的转置对应元素相乘的例子,只不过加入了struct数据结构,向multiply_transpose函数传入结构体,将结构体中的两个成员进行转置再对应元素相乘:

struct Struct {
  var a;
  var b;
}

def multiply_transpose(Struct value) {
  return transpose(value.a) * transpose(value.b);
}

def main() {
  Struct value = {[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]};
  var c = multiply_transpose(value);
  print(c);
}

由于MLIR中没有提供struct类型,要实现对上述Toy源程序的分析,需要自定义struct类型。

定义Type类

首先,我们需要在ToyType命名空间中,在Types枚举类型中添加Struct枚举常

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值