LLVM 使用 void 指针 arg 创建函数

LLVM create function with void pointer arg

我想在 LLVM 中创建一个函数,它从存储指令中获取指向任意内存的指针。例如:

%x = alloca i32, align 4
%z = alloca i32*, align 8
store i32 123, i32* %x, align 4
store i32* %x, i32** %z, align 8

在这里,我想检测存储指令以使用内存指针调用函数,内存指针一次是 i32* 类型,一次是 i32** 类型。我只需要 "first pointer" 到内存,我不需要取消引用指针或获取其类型信息。所以,我需要一个类似于 C 中的 void 指针的数据类型。

我如何在 LLVM 中做到这一点?

这是将 %x%y 都转换为 void*

的示例
  %x = alloca i32, align 4
  %y = alloca i32*, align 8
  store i32 123, i32* %x, align 4
  store i32* %x, i32** %y, align 8

  ; Convert x to void*

  %1 = bitcast i32* %x to i8*
  call void @instrument(i8* %1)

  ; Convert y to void*

  %2 = load i32*, i32** %y, align 8
  %3 = bitcast i32* %2 to i8*
  call void @instrument(i8* %3)