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

In LLVM, how can I get a Value's ValuetoValueMapTy (VMap)? What its purpose?

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

比如在cloneFunctionInto(...)期间用在llvm/lib/Transforms/Utils/CloneFunction.cpp

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

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

ps.:

我已经查看了那些可能对其他人在 Vmap 上提问有帮助的链接,但是 none 可以完全回答我的问题。

What to pass for the vmap argument of CloneFunction in llvm?

Filling the LLVM CloneFunction VMAP

LLVM CloneFunction.cpp

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];