1 //===- ValueMapper.cpp - Interface shared by lib/Transforms/Utils ---------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines the MapValue function, which is shared by various parts of
11 // the lib/Transforms/Utils library.
13 //===----------------------------------------------------------------------===//
15 #include "llvm/Transforms/Utils/ValueMapper.h"
16 #include "llvm/Constants.h"
17 #include "llvm/Function.h"
18 #include "llvm/Instructions.h"
19 #include "llvm/Metadata.h"
22 // Out of line method to get vtable etc for class.
23 void ValueMapTypeRemapper::Anchor() {}
25 Value
*llvm::MapValue(const Value
*V
, ValueToValueMapTy
&VM
, RemapFlags Flags
,
26 ValueMapTypeRemapper
*TypeMapper
) {
27 ValueToValueMapTy::iterator I
= VM
.find(V
);
29 // If the value already exists in the map, use it.
30 if (I
!= VM
.end() && I
->second
) return I
->second
;
32 // Global values do not need to be seeded into the VM if they
33 // are using the identity mapping.
34 if (isa
<GlobalValue
>(V
) || isa
<InlineAsm
>(V
) || isa
<MDString
>(V
))
35 return VM
[V
] = const_cast<Value
*>(V
);
37 if (const MDNode
*MD
= dyn_cast
<MDNode
>(V
)) {
38 // If this is a module-level metadata and we know that nothing at the module
39 // level is changing, then use an identity mapping.
40 if (!MD
->isFunctionLocal() && (Flags
& RF_NoModuleLevelChanges
))
41 return VM
[V
] = const_cast<Value
*>(V
);
43 // Create a dummy node in case we have a metadata cycle.
44 MDNode
*Dummy
= MDNode::getTemporary(V
->getContext(), ArrayRef
<Value
*>());
47 // Check all operands to see if any need to be remapped.
48 for (unsigned i
= 0, e
= MD
->getNumOperands(); i
!= e
; ++i
) {
49 Value
*OP
= MD
->getOperand(i
);
50 if (OP
== 0 || MapValue(OP
, VM
, Flags
, TypeMapper
) == OP
) continue;
52 // Ok, at least one operand needs remapping.
53 SmallVector
<Value
*, 4> Elts
;
54 Elts
.reserve(MD
->getNumOperands());
55 for (i
= 0; i
!= e
; ++i
) {
56 Value
*Op
= MD
->getOperand(i
);
57 Elts
.push_back(Op
? MapValue(Op
, VM
, Flags
, TypeMapper
) : 0);
59 MDNode
*NewMD
= MDNode::get(V
->getContext(), Elts
);
60 Dummy
->replaceAllUsesWith(NewMD
);
62 MDNode::deleteTemporary(Dummy
);
66 VM
[V
] = const_cast<Value
*>(V
);
67 MDNode::deleteTemporary(Dummy
);
69 // No operands needed remapping. Use an identity mapping.
70 return const_cast<Value
*>(V
);
73 // Okay, this either must be a constant (which may or may not be mappable) or
74 // is something that is not in the mapping table.
75 Constant
*C
= const_cast<Constant
*>(dyn_cast
<Constant
>(V
));
79 if (BlockAddress
*BA
= dyn_cast
<BlockAddress
>(C
)) {
81 cast
<Function
>(MapValue(BA
->getFunction(), VM
, Flags
, TypeMapper
));
82 BasicBlock
*BB
= cast_or_null
<BasicBlock
>(MapValue(BA
->getBasicBlock(), VM
,
84 return VM
[V
] = BlockAddress::get(F
, BB
? BB
: BA
->getBasicBlock());
87 // Otherwise, we have some other constant to remap. Start by checking to see
88 // if all operands have an identity remapping.
89 unsigned OpNo
= 0, NumOperands
= C
->getNumOperands();
91 for (; OpNo
!= NumOperands
; ++OpNo
) {
92 Value
*Op
= C
->getOperand(OpNo
);
93 Mapped
= MapValue(Op
, VM
, Flags
, TypeMapper
);
94 if (Mapped
!= C
) break;
97 // See if the type mapper wants to remap the type as well.
98 Type
*NewTy
= C
->getType();
100 NewTy
= TypeMapper
->remapType(NewTy
);
102 // If the result type and all operands match up, then just insert an identity
104 if (OpNo
== NumOperands
&& NewTy
== C
->getType())
107 // Okay, we need to create a new constant. We've already processed some or
108 // all of the operands, set them all up now.
109 SmallVector
<Constant
*, 8> Ops
;
110 Ops
.reserve(NumOperands
);
111 for (unsigned j
= 0; j
!= OpNo
; ++j
)
112 Ops
.push_back(cast
<Constant
>(C
->getOperand(j
)));
114 // If one of the operands mismatch, push it and the other mapped operands.
115 if (OpNo
!= NumOperands
) {
116 Ops
.push_back(cast
<Constant
>(Mapped
));
118 // Map the rest of the operands that aren't processed yet.
119 for (++OpNo
; OpNo
!= NumOperands
; ++OpNo
)
120 Ops
.push_back(MapValue(cast
<Constant
>(C
->getOperand(OpNo
)), VM
,
124 if (ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(C
))
125 return VM
[V
] = CE
->getWithOperands(Ops
, NewTy
);
126 if (isa
<ConstantArray
>(C
))
127 return VM
[V
] = ConstantArray::get(cast
<ArrayType
>(NewTy
), Ops
);
128 if (isa
<ConstantStruct
>(C
))
129 return VM
[V
] = ConstantStruct::get(cast
<StructType
>(NewTy
), Ops
);
130 if (isa
<ConstantVector
>(C
))
131 return VM
[V
] = ConstantVector::get(Ops
);
132 // If this is a no-operand constant, it must be because the type was remapped.
133 if (isa
<UndefValue
>(C
))
134 return VM
[V
] = UndefValue::get(NewTy
);
135 if (isa
<ConstantAggregateZero
>(C
))
136 return VM
[V
] = ConstantAggregateZero::get(NewTy
);
137 assert(isa
<ConstantPointerNull
>(C
));
138 return VM
[V
] = ConstantPointerNull::get(cast
<PointerType
>(NewTy
));
141 /// RemapInstruction - Convert the instruction operands from referencing the
142 /// current values into those specified by VMap.
144 void llvm::RemapInstruction(Instruction
*I
, ValueToValueMapTy
&VMap
,
145 RemapFlags Flags
, ValueMapTypeRemapper
*TypeMapper
){
147 for (User::op_iterator op
= I
->op_begin(), E
= I
->op_end(); op
!= E
; ++op
) {
148 Value
*V
= MapValue(*op
, VMap
, Flags
, TypeMapper
);
149 // If we aren't ignoring missing entries, assert that something happened.
153 assert((Flags
& RF_IgnoreMissingEntries
) &&
154 "Referenced value not in value map!");
157 // Remap phi nodes' incoming blocks.
158 if (PHINode
*PN
= dyn_cast
<PHINode
>(I
)) {
159 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
) {
160 Value
*V
= MapValue(PN
->getIncomingBlock(i
), VMap
, Flags
);
161 // If we aren't ignoring missing entries, assert that something happened.
163 PN
->setIncomingBlock(i
, cast
<BasicBlock
>(V
));
165 assert((Flags
& RF_IgnoreMissingEntries
) &&
166 "Referenced block not in value map!");
170 // Remap attached metadata.
171 SmallVector
<std::pair
<unsigned, MDNode
*>, 4> MDs
;
172 I
->getAllMetadata(MDs
);
173 for (SmallVectorImpl
<std::pair
<unsigned, MDNode
*> >::iterator
174 MI
= MDs
.begin(), ME
= MDs
.end(); MI
!= ME
; ++MI
) {
175 MDNode
*Old
= MI
->second
;
176 MDNode
*New
= MapValue(Old
, VMap
, Flags
, TypeMapper
);
178 I
->setMetadata(MI
->first
, New
);
181 // If the instruction's type is being remapped, do so now.
183 I
->mutateType(TypeMapper
->remapType(I
->getType()));