-reg2mem: Demote All Values to Stack Slots
在了解这个 pass 之前需要学习的背景知识是 LLVM IR Variables and Utilization 。
Description
-reg2mem pass 其实也就是 -mem2reg 的 reverse 版本。
这听起来好像不太 make sense,既然 -mem2reg 可以避免没有必要的 memory access 进而提升 performance,那么为啥反过来的 -reg2mem 有意义呢?
-reg2mem 主要有以下几个应用场景,比如 debugging,写一些不支持 SSA form 的 pass,更清晰的 alias analysis(这时候 alloca-store 会让 memory usage 更明确一些),等等。
所以这时候 -reg2mem 就派上用场了。
Code Example
因为是 -mem2reg 的 reverse 过程,所以这个 code example 直接反过来读 -mem2reg 就好了。