[llvm-commits] [llvm] r94632 - /llvm/trunk/lib/Linker/LinkModules.cpp
Chris Lattner
clattner at apple.com
Tue Jan 26 18:18:03 PST 2010
On Jan 26, 2010, at 4:30 PM, Victor Hernandez wrote:
> Author: hernande
> Date: Tue Jan 26 18:30:42 2010
> New Revision: 94632
>
> URL: http://llvm.org/viewvc/llvm-project?rev=94632&view=rev
> Log:
> Linker needs to do deep-copy of function-local metadata to update
> references to function arguments
>
> Modified:
> llvm/trunk/lib/Linker/LinkModules.cpp
>
> Modified: llvm/trunk/lib/Linker/LinkModules.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=94632&r1=94631&r2=94632&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Linker/LinkModules.cpp (original)
> +++ llvm/trunk/lib/Linker/LinkModules.cpp Tue Jan 26 18:30:42 2010
> @@ -392,7 +392,19 @@
> assert(!isa<GlobalValue>(CPV) && "Unmapped global?");
> llvm_unreachable("Unknown type of derived type constant
> value!");
> }
> - } else if (isa<MDNode>(In) || isa<MDString>(In)) {
> + } else if (const MDNode *MD = dyn_cast<MDNode>(In)) {
> + if (MD->isFunctionLocal()) {
> + SmallVector<Value*, 4> Elts;
> + for (unsigned i = 0, e = MD->getNumOperands(); i != e; ++i) {
> + Value *Op = MD->getOperand(i);
> + // LinkFunctionBody() already handled non-argument values.
> + Elts.push_back(isa<Argument>(Op) ? RemapOperand(Op,
> ValueMap) : Op);
I don't follow this logic. It seems that you should call RemapOperand
on all operands of the function MDNode. What if you have something
like !{ !{ i32 %0 } }
?
-Chris
> + }
> + Result = MDNode::get(In->getContext(), Elts.data(), MD-
> >getNumOperands());
> + } else {
> + Result = const_cast<Value*>(In);
> + }
> + } else if (isa<MDString>(In)) {
> Result = const_cast<Value*>(In);
> } else if (isa<InlineAsm>(In)) {
> Result = const_cast<Value*>(In);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list