将涉及CPU寄存器的指令转换为存储器指令
问题描述:
我是LLVM的新手,理解LLVM的指令生成。作为其中的一部分,我试图转换一个基本的布尔指令来直接使用内存寄存器作为操作数。例如,在下面的IR中,我希望and
操作使用%a
和%b
而不是%11
和%12
。将涉及CPU寄存器的指令转换为存储器指令
%11 = load i32, i32* %a, align 4 \n
%12 = load i32, i32* %b, align 4 \n
%13 = and i32 %11, %12\
store i32 %13, i32* %d, align 4\n
我需要为此编写一个新的and
指令,或者是有另一种更简单的方法?
答
我不认为这是可行的。如果没有明确的加载或存储,LLVM中的内存无法访问。
'%a'和'%b'是指针,将它们组合在一起意味着不同于将从它们加载的值进行“与”运算。那真的是你想要做的吗? – harold
我想获取%a和%b指向的值作为指令本身的一部分。我正在寻找像这样的指示。 %13 =和i32 *%a,i32 *%b。这是为了理解我是否可以在删除两条加载指令之前,通过直接获取指针%a和%b的内容。 –
好了,无法做到,那么通过指针加载和存储只能显式完成 – harold