- 博客(28)
- 收藏
- 关注
原创 LLVM TableGen 系统学习笔记
TableGen 系统可以帮助记录领域特定的信息。它也可以认为是一种小型的编译系统。TableGen 责负分析文件, 分析结果交给领域特定的后端进行处理。
2024-03-07 21:24:37
1441
原创 LLVM User 重载 new 分析
Value 表示了 LLVM IR 中需要通过指令运行得到的值。它是 Instruction 和 Function 的父类。每一个值都持有一个 Type 指针(表达了在 IR 中的值类型)和一个 Use 指针(指向了一个 use list)。User (Value 的子类) 定义了使用值的接口。Instruction 和 Constants 这两个常见类都是 User 的子类。Use 表示了了 User 实例对 Value 的使用。有利于。
2024-02-25 14:59:42
793
原创 LLVM-tutor 学习笔记4: StaticCallCounter
一个 analysis pass (假设名为 foo)要继承 AnalysisInfoMixin。它的分析结果的类型总是 foo::Result。它的分析方法的入口函数总是 runrun 的第一个参数是对应粒度的 IR, 第二个参数是对应粒度的 analysis manger。总有一个类型为 llvm::AnalysisKey 的私有变量 Key 用于 analysis manger 对 analysis 的定位和管理。
2024-02-20 10:35:33
375
原创 LLVM IRBuilder 学习笔记
IRBuilder 是用于帮助生成 LLVM IR 的类。一个 module 和一个 LLVM context 是一一对应的关系。IR Builder 在 module, function, basic block 中跟踪下一行指令的插入位置 ( 插入点 )。它还可以插入对应 C 标准库函数的调用, 创建全局变量或函数,以及内联汇编代码。要注意 IR Builder 不是线程安全的。在多线程生成代码时, 每个线程都要分配独立的 context, module 和 IR Builder。
2024-02-19 17:10:53
661
原创 LLVM-tutor 学习笔记2: OpcodeCounter
OpcodeCounter 是一个 analysis pass, 可以统计输入文件对应的 module 中每个函数使用的各个 LLVM IR opcode 的数量。为了可视化 OpcodeCounter 的分析结果,引入了一个专门输出结果的 transformation pass: OpcodeCounterPrinter。按照惯例, 这样的 printing pass 命令行选项为 print。
2024-02-18 19:26:58
1032
原创 LLVM-tutor 学习笔记- HelloWorld
这是 llvm-tutor 的第一个项目,展示了为 llvm 编写 pass 的基本过程。这是一个没有实现 print 方法的不完整 analysis pass。
2024-02-17 18:26:23
606
原创 LLVM 学习笔记 - Using the New Pass Manager
pass 可以在 module,CGSCC, function, loop 这些抽象的粒度上执行。
2024-02-17 16:46:57
1931
1
原创 c++ CRTP(Curiously Recurring Template Pattern)
对 CRPT 的定义如下:TheXYZ, whereYclass Y {};因为X继承的是 Y<X>, 在这种写法下, 只会有 X 是 Y<X> 的子类所以 在 Y 中通过可以安全转为 X, 而无需使用 dynamic_cast。
2024-02-14 21:36:52
636
1
原创 emacs 渐进学习记录, 阅读 paredit 项目
这个项目实现了一个 minor mode, 用于在编写 lisp 代码时简化对 S表达式的操作。
2023-11-01 19:46:32
100
原创 emacs 渐进学习记录, 阅读陈斌配置文件 init-cc-mode.el
在按在{ 或 else 关键字后, 不会自动生成新行(c-toggle-hungry-state 1) 贪婪式删除空格符(能删多少就删多少)
2023-09-25 17:57:49
108
1
原创 emacs 渐进学习记录, 阅读陈斌配置文件 init-chinese.el
使用 (and (boundp 'evil-mode) evil-mode) 确认在 evil-mode 中, 再根据不同的 evil 状态采取不同的 toggle 行为。在 toggle 之后,根据输入法状态开关 evil-escape-mode 并提示输入法的开关。
2023-08-31 13:22:07
105
原创 emacs 渐进学习记录, 阅读陈斌配置文件 init-company.el
这一段代码将 company-active-map 中 0到9按键绑定到了 my-company-number 函数上。this-command-keys 获取了调用时使用了按键为0~9中的哪一个, 再将其转为数字 n在检查了 数字不在candidates中,数字比 candidates 数量多 等情况之后, 使用对应的候选进行补全。
2023-08-28 18:43:54
246
1
原创 emacs 渐进学习记录, 阅读陈斌配置文件 init-dired.el
使用了 (interactive(body)) 的语法, 在 interactive 式调用命令时 body 返回的 list 中的元素对应了函数的传参,在这个例子中返回的 (list (dired-read..) current-prefix-arg files) 对应了参数 (command arg file-list)可以看出自定义 dired 下命令时可以使用的几个关键的函数。
2023-08-26 16:53:26
120
原创 emacs 渐进学习记录,利用yasnippet高效编写python __init__
今天整理 yasnippet 脚本时, 发现一个脚本在写 __init__ 时可以自动按参数生成 docstring, 以下是我测试的例子:我输入了doc, python, yas 这三个参数, 脚本自动为我准备好了对应的 docstring 中的参数文档然后我就在想可不可以增加这个脚本,让它可以根据输入的参数,自动生成 self.x=x 的语句( 这样做肯定有多余的语句, 但是删除比自己写快多了)
2023-08-25 13:39:43
178
1
原创 emacs 渐进学习记录, 阅读陈斌配置文件 init-bookmark.el
bookmark 是 emacs 用于保存访问文件特定位置的机制自带的函数只提供了基本功能, 并不智能, 比如 set 后不会 save这个文件中对 bookmark 的 set 和跳转作了调整在函数的开头使用来保证后续操作的合理性。
2023-08-24 16:10:16
141
1
原创 emacs 渐进学习记录, 阅读陈斌配置文件 init-essential.el
使用 prefix 来控制同一个函数展现不同的行为,可以减少快捷键的分配和记忆压力"))如果光标下有 symbol 则使用该 symbol, 否则就要求输入, 可以减少键盘输入使用了 counsel 提供的函数ounsel-etags-grep, 这个函数是对 ripgrep 和 grep 的调用的封装default keyword 对应 grep keywordroot 对应需要搜索的目录my-multi-purpose-grep 的多个分支中都是在 根目录下进行搜索,耗时比较长。
2023-08-23 14:06:22
199
原创 leetcode日志 2022.6.20
因为原有的k个链表是有序的,所以只要比较每个链表中还没有比较过的部分的第一个元素,找到它们之中的最小值,就是所有链表中的最小值,即可插在结果链表的最后。在有很多个升序链表的情况下,找到这个最小值的算法的性能还需要再优化。不使用python的模块的话,可以使用败者树,性能较好。使用python的模块会方便一些。...
2022-06-20 20:18:21
1116
原创 leetcode日志 2022.6.15
一开始首先做出了题目对应的树形。第一个想法是每一层一个循环,因为它的树枝的减少是有规律的。后来写着发现太复杂了,所以放弃了。后来又想了两种思路,一种是每次把原有的集合中的元素取出并添加之前未添加过的新数字,一种是用回溯算法 。之后选择了用回溯算法写,因为想训练一下。...
2022-06-15 16:49:00
1539
原创 leetcode日志2022.6.14
回溯以进行枚举。注意题目要求 元素不重复,但是可以重复选取。40. 组合总和 II思路题目中要求重复元素但不可以重复选用。要注意递归调用时的参数和之前的不同。并且要注意进行剪枝,否则会出现重复的结果。如果能做出树形,对于剪枝来说是很有帮助的。在下图可以看出,需要剪去的是与之前的数字相同的枝,或者剪去与之后的数字相同的枝。(为了方便剪枝,将题目中给的candidates先排序) 216. 组合总和 III思路同今天的第一题...
2022-06-14 17:20:28
140
原创 leetcode 日志2022.6.7
这道题目可以用动态规划,因为满足了使用动态规划的几个特点:求最值,最优子结构(即主问题是最优解时,子问题也是最优解)。由于还符合了重叠子问题的情况(即一个子问题被多次求解),所以可以使用备忘录的技术,使用一个数组记录子问题的答案。......
2022-06-11 15:17:58
100
原创 leetcode日志2022.6.5
关键点在于二叉搜索树的有序性,并且要选择好遍历的顺序与处理节点的时机。利用二叉搜索树的右子树大于根的特性,以右 根 左的顺序遍历并累记节点上的值的和,因为题目的要求是大于等于当前结点值的所有结点值的和,所以要先把当前结点的值加上,再把累记的和赋值当前结点。...
2022-06-05 18:32:22
92
原创 c与c++不同的关键字
本文会举出c和c++中有不同的关键字,会先谈c中的情况,再说c++中的情况。如有遗漏,欢迎补充,尽力补上。registerregister的作用是让变量尽可能地存储在寄存器中。在c语言中,对声明了register的变量取地址,会得到类似 error: address of register variable ‘a’ requested 的报错。在c++中,对register的变量取地址则不会报错。编译器可能对声明了register的变量作一些额外的优化。在c++17之后,register就不再被
2022-01-14 19:35:53
338
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人