LLVM:测试基础(一),llvm-lit、FileCheck

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

前期的 MLIR 系列文章中,没有介入测试工作。测试本身也是一个比较大的主题,这里希望用几篇文章讲明白如何利用 LLVM 的基础设施完成所编写代码的测试工作。

本文为第 1 期,将使用一个例子介绍如何使用 llvm-lit 和 FileCheck 这两个最常用的工具完成测试工作。

  • llvm-lit,LLVM Integrated Tester,通过 Python 语法编写配置文件,完成对某个项目的测试工作
  • FileCheck,一个比 grep 功能更多的文本查找与匹配验证工具,可以帮助程序员确认代码是否正确生成

这两个工具都可以通过 pip 安装,分别叫 litfilecheck如果使用了 pip 安装,下面的相关工具名请自行更改替换。

关于两个工具的更多使用细节请自行前往相关网站。

下面用一个小例子说明如何使用这两个工具,

Read more

MLIR:新建一个Dialect(十),CMakeLists.txt

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 16 期,继续介绍 mlir-hello 是如何利用 cmake 来组织项目的。

转载请注明出处!

关于文件结构,在之前的文章MLIR:新建一个Dialect(一)已经介绍过了。

上一篇文章已经介绍了mlir-hello项目根目录下,也就是总的的工程配置部分,本质上也就是文件结构和 cmake 项目文件的编写。

本文继续讲下各个子目录的 CMakeLists.txt 文件。

Read more

MLIR:新建一个Dialect(九),CMakeLists.txt

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 15 期,介绍 mlir-hello 是如何利用 cmake 来组织项目的。

转载请注明出处!

关于如何编写新的 Dialect 的编码部分前期已经介绍完毕。

今天介绍一下mlir-hello项目的工程配置部分,本质上也就是文件结构和 cmake 项目文件的编写。

Read more

MLIR:新建一个Dialect(八),opt

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 14 期,介绍如何创建 hello-opt 来应用上一篇文章建立的那些 Pass。

转载请注明出处!

MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalgtosaaffine 这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。

上一篇文章讲解了 Hello DialectAffine Dialect 的 Lowering,本文继续讲如何将这一 Lowering 实际应用到 hello-opt 中,也即如何完成到汇编文件 .ll 文件的生成。

当然了,前期也提到过,MLIR 生态的目标只在 IR 阶段,所以其实只需要能生成标准的 .mlir 文件。到 .ll 的步骤实际上由 LLVM 后端完成。

Read more

MLIR:新建一个Dialect(七),lowering

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 13 期,继续介绍一个简单的 MLIR Dialect.

转载请注明出处!

MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalgtosaaffine 这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。

好了,如果说前面的部分算是 MLIR 的坡道起步,那这一节就要开始弹射起飞了。本期开始讲解 Dialect 的 Lowering,即由 MLIR 代码逐级转换为机器代码的过程。

当然了,前期也提到过,MLIR 生态的目标只在中间阶段,所以其 lowering 本质上并不涉及太多最终的 IR 生成,这一部分更依赖 LLVM 的基石。

内容较多,建议收藏、细品。

Read more

MLIR:新建一个Dialect(六),ODS框架小结

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 12 期,继续介绍一个简单的 MLIR Dialect.

转载请注明出处!

MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalgtosaaffine 这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。

接上回,本文继续新建一个 Dialect的内容。在实操了通过 mlir_tblgen 生成新的 Dialect/Operation C++ 代码后,本文小结一下 ODS 的作用。

Read more

MLIR:新建一个Dialect(五),通过.td定义新Op

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 11 期,继续介绍一个简单的 MLIR Dialect.

转载请注明出处!

MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalgtosaaffine 这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。

接上回,本文继续新建一个 Dialect的内容。本文开始解析项目的各个实现部分之一——通过.td定义新 “Hello_Op”。

Read more

MLIR:新建一个Dialect(四),通过.td定义新Dialect

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 10 期,介绍如果通过 .td 定义一个 HelloDialect.

转载请注明出处!

MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalgtosaaffine 这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。

接上回,本文继续新建一个 Dialect的内容。本文开始解析项目的各个实现部分之一——通过.td定义新 Dialect “Hello”。

Read more

MLIR:新建一个Dialect(三),待编译的mlir文件

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 9 期,继续介绍一个简单的 MLIR Dialect.

转载请注明出处!

MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalgtosaaffine 这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。

接上回,本文继续新建一个 Dialect的内容。本文开始解析项目的各个实现部分之一——待编译的 .mlir 文件。

Read more

MLIR:新建一个Dialect(二)

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 8 期,继续介绍一个简单的 MLIR Dialect.

转载请注明出处!

MLIR 项目的核心是 Dialect,MLIR 自身就拥有例如linalgtosaaffine 这些 Dialect。各种不同的 Dialect 使不同类型的优化或转换得以完成。

接上回,本文继续新建一个 Dialect的内容。

Read more