Chromium Code Reviews| Index: lib/Transforms/NaCl/ReplacePtrsWithInts.cpp |
| diff --git a/lib/Transforms/NaCl/ReplacePtrsWithInts.cpp b/lib/Transforms/NaCl/ReplacePtrsWithInts.cpp |
| index 53f0d1d809e9b89f52d486c10eb67e21c5c33926..d1fab1fe9f22ee1cf204bf4cc5df4f9de364a1db 100644 |
| --- a/lib/Transforms/NaCl/ReplacePtrsWithInts.cpp |
| +++ b/lib/Transforms/NaCl/ReplacePtrsWithInts.cpp |
| @@ -283,24 +283,6 @@ void FunctionConverter::eraseReplacedInstructions() { |
| } |
| } |
| -static void ConvertMetadataOperand(FunctionConverter *FC, |
| - IntrinsicInst *Call, int Index) { |
| - MDNode *MD = cast<MDNode>(Call->getArgOperand(Index)); |
| - if (MD->getNumOperands() != 1) |
| - return; |
| - Value *MDArg = MD->getOperand(0); |
| - if (MDArg && (isa<Argument>(MDArg) || isa<Instruction>(MDArg))) { |
| - MDArg = FC->convert(MDArg, /* BypassPlaceholder= */ true); |
| - if (PtrToIntInst *Cast = dyn_cast<PtrToIntInst>(MDArg)) { |
| - // Unwrapping this is necessary for llvm.dbg.declare to work. |
| - MDArg = Cast->getPointerOperand(); |
| - } |
| - SmallVector<Value *, 1> Args; |
| - Args.push_back(MDArg); |
| - Call->setArgOperand(Index, MDNode::get(Call->getContext(), Args)); |
| - } |
| -} |
| - |
| // Remove attributes that only apply to pointer arguments. Returns |
| // the updated AttributeSet. |
| static AttributeSet RemovePointerAttrs(LLVMContext &Context, |
| @@ -333,6 +315,7 @@ static AttributeSet RemovePointerAttrs(LLVMContext &Context, |
| case Attribute::ReadOnly: |
| case Attribute::NonNull: |
| case Attribute::Dereferenceable: |
| + case Attribute::DereferenceableOrNull: |
| break; |
| default: |
| AB.addAttribute(*Attr); |
| @@ -591,25 +574,12 @@ bool ReplacePtrsWithInts::runOnModule(Module &M) { |
| ConvertInstruction(&DL, IntPtrType, &FC, Iter++); |
| } |
| } |
| - // Now that all the replacement instructions have been created, we |
|
jvoung (off chromium)
2015/05/26 20:39:45
this is automatic now?
Derek Schuff
2015/05/26 22:01:32
RAUW seems to work on MetadataAsValue. We could ma
|
| - // can update the debug intrinsic calls. |
| - for (Function::iterator BB = NewFunc->begin(), E = NewFunc->end(); |
| - BB != E; ++BB) { |
| - for (BasicBlock::iterator Inst = BB->begin(), E = BB->end(); |
| - Inst != E; ++Inst) { |
| - if (IntrinsicInst *Call = dyn_cast<IntrinsicInst>(Inst)) { |
| - if (Call->getIntrinsicID() == Intrinsic::dbg_declare) { |
| - ConvertMetadataOperand(&FC, Call, 0); |
| - } |
| - } |
| - } |
| - } |
| FC.eraseReplacedInstructions(); |
| // Patch the pointer to LLVM function in debug info descriptor. |
| auto DI = FunctionDIs.find(OldFunc); |
| if (DI != FunctionDIs.end()) |
| - DI->second.replaceFunction(NewFunc); |
| + DI->second->replaceFunction(NewFunc); |
| OldFunc->eraseFromParent(); |
| } |