在LLVM中,如何获取Value的ValuetoValueMapTy(VMap)?其目的是什么?

nic*_*ico 2 c++ llvm llvm-ir

在克隆函数的上下文中,使用的对象之一是ValueToValueMapTy &VMapa typedefof ValueMap<const Value *, WeakVH>

例如,它在cloneFunctionInto(...)in期间使用llvm/lib/Transforms/Utils/CloneFunction.cpp

因此,我有一些问题可以帮助我阐明其目的:

  1. llvm::Value每个都在 VMap 上吗?或者这仅属于功能或模块或什么?
  2. 如何获取特定函数的 ValueMap?
  3. 它的目的是保存llvm::Values函数的信息,这是否正确?

附:

我已经检查过那些可能对其他人在 Vmap 上提问有帮助的链接,但没有一个能完全回答我的问题。

llvm 中 CloneFunction 的 vmap 参数传递什么?

填充 LLVM CloneFunction VMAP

LLVM克隆函数.cpp

Yis*_*hen 5

CloneFunction 中 ValueMap 的用途是记录从源函数中的值到克隆函数中的值的映射。

例子:

Function *F;
Value *V = /* some register in F */;
ValueToValueMapTy VMap;
auto *Clone = CloneFunction(F, VMap);
// V2 represents essentially the same register as V,
// except it's in Clone instead of F
Value *V2 = VMap[V];
Run Code Online (Sandbox Code Playgroud)

  • 后者。他们是独立的。 (2认同)