1
我想向基本块插入零扩展指令和乘法指令。输入是,将零扩展指令插入到基本块中
define void @DriverInit() {
EntryBlock:
%abc = call i32 @cuInit(i32 0)
ret void
}
我想将它转换为,
define void @DriverInit() {
EntryBlock:
%abc = call i32 @cuInit(i32 0)
%2 = zext i32 1 to i64
%3 = mul i64 %2, ptrtoint (i1** getelementptr (i1** null, i32 1) to i64)
ret void
}
如何使用LLVM C++ API来做到这一点?我使用下面的代码来创建零扩展指令,但我无法做到这一点。
IRBuilder<> builder(BB);
Value *One = builder.getInt32(1);
Value *zer=builder.CreateZExt(One, IntegerType::getInt64Ty(M.getContext()),"1");
CreateZExt的第二个参数是我想要零扩展的目的地类型,如果我错了,请纠正我。
我是LLVM的初学者,发现很难获得关于在通行证中使用哪些功能的信息。除了源代码的doxygen文档外还有哪些资源可用?
我不明白你的问题 - 你能澄清吗?您有什么输入IR,以及您想要创建的输出是什么?在'mul'的第二个参数中做了什么指针咒语? – 2012-02-24 21:30:46
如果你已经在输入函数中有EntryBlock,你为什么要创建一个basicblock? – CAFxX 2012-02-25 08:06:13
此外,如果你在展示你所做的(错误的)方式之前,实际解释了你想要完成的事情,这可能会有所帮助。 – CAFxX 2012-02-25 08:07:23