在LLVM中,我如何获得Value的ValuetoValueMapTy(VMap)?它的目的是什么?

时间:2017-08-10 20:49:08

标签: c++ llvm llvm-ir

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

例如,它在cloneFunctionInto(...)

中的llvm/lib/Transforms/Utils/CloneFunction.cpp期间使用

因此,我有问题,这有助于我澄清其目的:

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

    我已经检查了那些可能对其他人提出有关Vmap问题的链接,但没有一个能完全回答我的问题。

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

    Filling the LLVM CloneFunction VMAP

    LLVM CloneFunction.cpp

1 个答案:

答案 0 :(得分:1)

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