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

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

本文关键字:是什么 ValuetoValueMapTy VMap Value 获取 LLVM 何获取      更新时间:2023-10-16

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

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

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

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

附言:

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

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

填充 LLVM 克隆函数 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];