Log
1 产品 Product
1.1 创建 Product
创建名为 project
的 rails 应用
rails new project
llvm 是 SSA 形式的,但是在没有经过 mem2reg 的时候,SSA 是内存形式的,也就是说,对于每个变量,只要在定义他的时候,为他在内存中划分空间存入,在使用他的时候在取出来,这样就可以达到 SSA 的效果。这是因为 SSA 只要求我们不能改变一个已经定义的值,改变内存的内容显然并不违法 SSA。
这会导致当我们提到(也就是查询)一个局部变量的时候,其实是从符号表中取出来的是它的指针,这个过程一般发生在 LVal
。一般我们会对变量干两件事情,读变量和写变量和做实参。对于读变量,一般发生在 LVal
作为 PrimaryExp
的时候发生,此时需要在 PrimaryExp
中对其进行 Load
,而写变量一般发生在 LVal
在 AssignStmt
和 InStmt
中,只需要用 Store
将其写入即可。做实参要单独挑出来讲,是因为它的逻辑是与 C 需要保持一致的,他是有指针类型的,这就要求我们对他进行单独的处理。这就是内存式 SSA 的基本逻辑。