2017-08-10 6 views
0

Sur le contexte des fonctions de clonage, l'un des objets utilisés est le ValueToValueMapTy &VMap qui est un typedef de ValueMap<const Value *, WeakVH>.Dans LLVM, comment puis-je obtenir un ValuetoValueMapTy (VMap) d'une valeur? Quel est son but?

Par exemple, il est utilisé pendant cloneFunctionInto(...) dans llvm/lib/Transforms/Utils/CloneFunction.cpp

Ainsi j'ai des questions qui me aider à clarifier son but:

  1. Est-ce que chaque llvm::Value a son sur VMap? Ou cela appartient seulement à des fonctions ou des modules ou quoi?
  2. Comment puis-je obtenir cette ValueMap pour une fonction spécifique?
  3. Est-il correct que son but est de contenir des informations de llvm::Values de la fonction?

ps .:

J'ai déjà vérifié ces liens qui peuvent être utiles aux autres de poser des questions sur Vmap, mais aucun d'entre eux pourrait complètement répondre à mes questions.

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

Filling the LLVM CloneFunction VMAP

LLVM CloneFunction.cpp

Répondre

1

Objet de l'ValueMap dans CloneFunction est d'enregistrer les correspondances entre les valeurs de la fonction de source de valeurs de la fonction clone.

Exemple:

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

Ainsi, le processus est le suivant: premier enregistrement I et plus tard, je remapper? C'est pourquoi je peux le laisser tomber après? – nico

+0

Je ne suis pas sûr de comprendre votre question. J'ai ajouté un exemple dans ma réponse. J'espère que cela aide. –

+0

V2 (ou VMap [V]) et V sont-ils liés ensemble? Etre la même chose? Ou sont-ils deux objets différents dans deux fonctions différentes et l'un ne dépend plus du cycle de vie de l'autre? – nico