c++ - 在 clang 3.3.1 中跨过程使用 AliasAnalysis

标签 c++ clang llvm

我正在做一个扩展 clang 3.3.1 的项目。

我想使用 AliasAnalysis 类,但我不确定是否遗漏了什么。 当我询问 AA 时,如果不同函数中的内存位置存在别名,clang 会崩溃并出现以下错误:“BasicAliasAnalysis 不支持过程间查询。” 我想,这可能是一种解决方案,使用不同类型的分析,但我无法弄清楚如何在代码中做到这一点。有什么建议么? :)

最佳答案

LLVM 中还没有任何过程间别名分析。部分问题是我们需要一个新的 API 来表达查询。

考虑一个自递归函数@f(noalias %x, noalias %y),它用@f(%y, %x) 调用自己。今天我们回答 %x noalias %y,这在任何单个调用框架中都是正确的。但是,如果您查看多个调用帧,您会发现被调用者中的 %x 可能是调用者中的 %y 的别名,因此同一函数中的 %x 和 %y 可能是别名。这就是我们需要将当前 API 与过程间 API 分开的核心原因。

关于c++ - 在 clang 3.3.1 中跨过程使用 AliasAnalysis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31383982/

相关文章:

c++ - cout 不打印无符号字符

c++ - 与来自 time.h 的标识符 'clock' 发生冲突

c++ - 我怎样才能告诉 clang-tidy 检查 pragma 一次而不是 llvm 风格的标题守卫?

llvm - 如何轻松地向 LLVM 模块添加声明?

c++ - 将 void* 分配给 UINT 或 unsigned int

c++ - QPrinter 无法正确设置 HTML 页面样式以在 PDF 文档中呈现图像

使用堆栈和队列的 C++ 计算器

docker - 在 Rocker/verse 上使用 rstan 构建 Docker 镜像

c++ - 自动在头文件中添加#pragma once

c++ - 在 LLVM 中的两个 block 之间插入一个 block