大家好, 最近在做llvm的C编译器后端时遇到一个问题。 我的目标体系结构中有两类通用寄存器,一类用于算术逻辑运算,一类用于地址计算以及访存。两类寄存器都是32位,两者之间可以进行值传递。 显然,在做寄存器分配时区分指针以及32位整型可以消除一部分寄存器值传递代码。但是在llvm后端中将指针与32位整型都视为i32,所以在寄存器分配时无法区分指针与32位整型。更遗憾的是,llvm当前的mainline source tree中没有任何机制支持这种区分。在早前版本的llvm中支持的blackfin具有类似的寄存器分配问题,但是后来这个target被删掉了。 因为我对gcc内部不熟,故请教大家gcc是如何处理类似情况的。 先谢啦! -- 杨勇勇 (Yang Yong-Yong)