clang - 获取llvm中局部变量的实际值

标签 clang llvm llvm-clang llvm-ir

如果我有这个例子:

int a=0, b=0;

a 和 b 是局部变量并对其值进行任何修改,例如:
a++;
b++;

我需要在运行 MCJIT 期间获取此行代码中的值。

我的意思是值(value)不是 Value类,但实际整数或任何类型的值。

最佳答案

您需要从 JITed LLVM 函数返回值,以便从调用 MCJIT 的代码中检索它。

看看这个 Kaleidoscope example .

相关代码在 HandleTopLevelExpression() 中:

if (FunctionAST *F = ParseTopLevelExpr()) {
  if (Function *LF = F->Codegen()) {
    // JIT the function, returning a function pointer.
    void *FPtr = TheHelper->getPointerToFunction(LF);

    // Cast it to the right type (takes no arguments, returns a double) so we
    // can call it as a native function.
    double (*FP)() = (double (*)())(intptr_t)FPtr;
    fprintf(stderr, "Evaluated to %f\n", FP());
  }
}

关于clang - 获取llvm中局部变量的实际值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44874575/

相关文章:

cmake - 使用 CMake 在 GCC 和 Clang/LLVM 之间切换

c++ - 如何在 Bazel 中禁用 C/C++ `-Werror` 构建错误? (又名 : how to turn OFF specific warnings already turned on by `-Wall -Werror` )

linux - 按照说明构建 LLVM,但未生成可执行文件

clang - 为什么 clang/llvm 在构建碳时使用 Bazel 向我抛出这个错误

ios - Xcode 10 如何使用带有 obfuscator-llvm 插件的新构建系统

c - 重新定义short long以在嵌入式c代码上使用代码分析工具

c++ - 如何在 gcc 或 clang 中启用从 int 到 int64_t 的转换警告

linux - 在配置脚本中安装依赖项

clang - 如何告诉 clang 我的 LLVM 目标应该使用 16 位 'int'?

cmake - 在 CMake 中指定 CUDA 编译器