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

广告网站建设流程优化公司网站排名

广告网站建设流程,优化公司网站排名,安徽网站建设推广,展展示型网站开发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.hkea.cn/news/804729/

相关文章:

  • 自建网站平台可以实现哪些功能网络营销这个专业怎么样
  • 佛山新网站制作公司网页制作成品模板网站
  • 校园网站建设的意见企业管理培训课程网课
  • 郑大远程教育动态网站建设seo优化关键词排名
  • 做logo什么网站昆明百度关键词优化
  • 怎样做省钱购物网站sem推广代运营
  • 英文网站开发公司万网阿里云域名查询
  • 做调查问卷网挣钱的网站新闻 今天
  • 网站建设工作小组在线建站平台免费建网站
  • 可以发广告的网站湖南seo推广系统
  • 大丰网站建设哪家好成都seo
  • 学校网站建设项目的wbsseo交流qq群
  • 筑梦网站建设西安百度竞价开户
  • 个体营业执照可以做网站搞推广吗推广网站制作
  • 公共交通公司网站建设方案移动慧生活app下载
  • 国内开源代码网站搜了网推广效果怎么样
  • html5 metro风格网站模板今日新闻事件
  • 网站不在首页显示出来做网络推广
  • 上海网站seo公司网页推广平台
  • 网站服务器租用价格表百度怎么发布自己的广告
  • 经纪人做网站技巧搜索引擎入口yandex
  • 教育网站制作哪家服务好全球外贸采购网
  • 响应式网络网站源码百度关键词查询网站
  • 南京网站制作设计公司网络运营团队
  • 阿里巴巴上怎样做自己的网站seo网站优化网站编辑招聘
  • 网站做付费推广都需要问什么网络热词2022
  • 给男票做网站表白的软件产品市场推广计划书
  • 西安网站制作定制怎么制作自己的个人网站
  • wordpress 如何移动端盐城seo优化
  • asp.net 制作网站开发百度竞价排名软件