当前位置: 首页 > news >正文

2_ 如何写一份详细的网站开发方案简洁大气的公司网站

2_ 如何写一份详细的网站开发方案,简洁大气的公司网站,网站互联网推广,微信小程序如何搭建Basic TableGen 系统可以帮助记录领域特定的信息。它也可以认为是一种小型的编译系统。 TableGen 责负分析文件, 分析结果交给领域特定的后端进行处理。 重要的概念 records 一个 record 有一个独立的名称,一系列值和一系列父类。 它保存了特定领域…

Basic

TableGen 系统可以帮助记录领域特定的信息。它也可以认为是一种小型的编译系统。

TableGen 责负分析文件, 分析结果交给领域特定的后端进行处理。

重要的概念

records

一个 record 有一个独立的名称,一系列值和一系列父类。 它保存了特定领域的知识。

可以认为 tablegen 前端生成 recode 流, 对于其中 record 的解释由具体的后端执行。

definitions

record的具体形式, 按数据结构看是 key-value 字典, 它的具体含义与作用由特定的后端后决定。可以有名,也可以无名。

def

例子:

def HelloWorld { 

string msg = "Hello world!";

}

classes

表示抽象的 record, 用于构造和描述其它的 record。类方便于定义目标领域的抽象。

class

class ProcNoItin<string Name, list<SubtargetFeature> Features>: Processor<Name, NoItineraries, Features>;

multiclasses

表示一组抽象的 record, 一次实例化可以产生多个 definations。

可以看到在 multiclasses 内部 def 了多个 defination。 使用 defm 调用 muliclasses 的构造。

multiclass ro_signed_pats<string T, string Rm, dag Base, dag Offset, dag Extend, dag address, ValueType sty> {
def : Pat<(i32 (!cast<SDNode>("sextload" # sty) address)),(!cast<Instruction>("LDRS" # T # "w_" # Rm # "_RegOffset")Base, Offset, Extend)>;def : Pat<(i64 (!cast<SDNode>("sextload" # sty) address)),(!cast<Instruction>("LDRS" # T # "x_" # Rm # "_RegOffset")Base, Offset, Extend)>;
}defm : ro_signed_pats<"B", Rm, Base, Offset, Extend,!foreach(decls.pattern, address,!subst(SHIFT, imm_eq0, decls.pattern)),i8>;

TableGen 的后端

clang-tblgen [options] [filename]

lldb-tblgen [options] [filename]

llvm-tblgen [options] [filename]

mlir-tblgen [options] [filename]

大体上是这几个, 但是每个命令指令不同的选项生成的效果也不同。

比如 clang 有这几个和 riscv 相关的指令:

-gen-riscv-vector-header

Generate riscv_vector.h for Clang.

-gen-riscv-vector-builtins

Generate riscv_vector_builtins.inc for Clang.

-gen-riscv-vector-builtin-codegen

Generate riscv_vector_builtin_cg.inc for Clang.

-gen-riscv-sifive-vector-builtins¶

Generate riscv_sifive_vector_builtins.inc for Clang.

-gen-riscv-sifive-vector-builtin-codegen

Generate riscv_sifive_vector_builtin_cg.inc for Clang.

类型系统

  1. bit, bits<N>, int
  2. string, code
  3. list<T>
  4. unset
  5. dag
  6. 自定义的 class

部分类型举例

  1. bit 0或1
  2. bits: { 1, 0, 1, 0, 1, 0 }
  3. string: “this is a string”
  4. code: [{ this_is_code(); }]

list:

  1.  [ “this”, “is”, “a”, “list” ]
  2.  [ “explicitly”, “typed”, “list”, “literal” ]
  3.  Indexing a list: foo[4]

Unset value

表现在打印输出上是一个 ?, 它可以是任意类型

dag

类似于 S-expression, S表达式。 典型的应用场景是 ISel 即指令选择。

(op arg0:$name0, arg1:$name1, ...)

code

获取 defination 信息

我们可以使用 llvm-tblgen 或在线网站 Compiler Explorer  来查看一个tablegen 文件对应的 class 和 defination 流,这有利于我们了解现有的 tablegen 文件描述了什么东西。

tablegen 例子

def

def HelloWorld {

string msg = "Hello world!";

}

def {     // 匿名

string msg = "Hello world!";

}

class

class C {

int c = 7;

int d = 7;

}

class D<int a> : C{ // 继承, 模板 , unset

int e=a;

}

def X: C {}

def Y: D<1>{} // 模板传参

let

class C {
    int a;
    int b;
}
let a=5, b=6 in {
    def X: C {}
}

multiclass & defm

class C {

int c = 7;

int d = 7;

}

class D<int a>{

int e=a;

}

multiclass E<int num>{

let c=num in def _c:C;// 在 muliclass 中使用 let 的语法

def _d : D<num>;

}

defm INST: E<9>; // 一次定义2个 defination

foreach

class C {

int c = 7;

int d = 7;

}

foreach i = [0, 1, 2, 3] in {

def R#i : C; // #i 会替换成对应的值

def F#i : C;

}

!cast<>

根据名称(字符串)获取类

class B{

string b="isb";

}

class C <string name> {

B b_of_c = !cast<B>(name);

}

def firstB: B;

def c:C<"firstB">;

拼接字符串

class Hello <string _msg> {

string msg = "Hello " # _msg;

}

def HelloWorld: Hello<"world!"> {}

参考

1 TableGen Programmer’s Reference — LLVM 19.0.0git documentation

https://github.com/llvm/llvm-project/blob/main/llvm/utils/TableGen/jupyter/tablegen_tutorial_part_1.ipynb

https://archive.fosdem.org/2019/schedule/event/llvm_tablegen/attachments/slides/3304/export/events/attachments/llvm_tablegen/slides/3304/tablegen.pdf

http://www.yayakq.cn/news/484023/

相关文章:

  • 360网站收录大作设计网站官网登录
  • 娱乐网站策划书南京cms模板建站
  • 网站建设怎么下载代码seo搜狗排名
  • 软件开发包括网站开发吗下载用的网站怎么做
  • 网站空间免费的能用吗青岛代理记账多少钱
  • 个人网站设计与开发电商网站创办过程
  • 晋江模板建站怎么做图片展示网站
  • 郑州网站免费制作图片主题wordpress
  • 网站 备案 中国 名字清远市seo广告优化
  • 招聘网站建设价格网站建设与管理 教学设计
  • 手机网站推荐哪些重庆网站icp备案查询
  • 网站开发范围说明书百度软件应用中心下载
  • 央企直招出国劳务网站北京建设
  • 相关网站怎么做化妆品网络营销策划方案
  • 美橙互联 送网站提供网站建设课程代码
  • 建网站赚钱网站建设ppt演示文稿
  • 注册网站什么要求广告信息
  • 正能量不良网站直接进入wordpress导航链接
  • 重庆建网站推广价格如何建设淘宝网站
  • 中石化第四建设有限公司网站北京住房城乡建设部网站八大员
  • 单页营销网站模板网站建设怎么样工作
  • 网站建设目的和功能定位wordpress填写信息插件
  • 原创 网站 源码加强思政部网站建设
  • 手机网站类型手机html网页制作软件
  • 云南建设厅网站首页免费创网站
  • 网站建设学习什么平台运营需要多少钱
  • 织梦网站图片不显示图片河南网站建设工作室
  • 嘉兴品牌网站建设贵阳网站网站建设
  • 电子商务网站建设html王烨妮
  • 网站的背景图怎么做万户网络公司如何