diff options
author | David Chisnall <csdavec@swan.ac.uk> | 2010-05-02 13:41:58 +0000 |
---|---|---|
committer | David Chisnall <csdavec@swan.ac.uk> | 2010-05-02 13:41:58 +0000 |
commit | 4b02afcb45cd1a384de7d45f440a8be091dd500b (patch) | |
tree | b57c3aab07afd5d632f3a6aee73a96ecc5e7c383 /lib/CodeGen | |
parent | 06a9f3680d22529a2fcf20c52d71cf221d99d910 (diff) |
As per Chris' request, return the Instruction from EmitCall and add the metadata in the caller.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102862 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/CGCall.cpp | 7 | ||||
-rw-r--r-- | lib/CodeGen/CGObjCGNU.cpp | 11 | ||||
-rw-r--r-- | lib/CodeGen/CodeGenFunction.h | 3 |
3 files changed, 12 insertions, 9 deletions
diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index f7db0d19a2..92d15d9d8c 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -870,8 +870,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, ReturnValueSlot ReturnValue, const CallArgList &CallArgs, const Decl *TargetDecl, - unsigned MDKind, - llvm::MDNode *Metadata) { + llvm::Instruction **callOrInvoke) { // FIXME: We no longer need the types from CallArgs; lift up and simplify. llvm::SmallVector<llvm::Value*, 16> Args; @@ -997,8 +996,8 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, Args.data(), Args.data()+Args.size()); EmitBlock(Cont); } - if (Metadata) { - CS->setMetadata(MDKind, Metadata); + if (callOrInvoke) { + *callOrInvoke = CS.getInstruction(); } CS.setAttributes(Attrs); diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp index 8afce6204d..3c51b7ee9d 100644 --- a/lib/CodeGen/CGObjCGNU.cpp +++ b/lib/CodeGen/CGObjCGNU.cpp @@ -566,8 +566,11 @@ CGObjCGNU::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF, }; llvm::MDNode *node = llvm::MDNode::get(VMContext, impMD, 3); - return CGF.EmitCall(FnInfo, imp, ReturnValueSlot(), ActualArgs, - 0, msgSendMDKind, node); + llvm::Instruction *call; + RValue msgRet = CGF.EmitCall(FnInfo, imp, ReturnValueSlot(), ActualArgs, + 0, &call); + call->setMetadata(msgSendMDKind, node); + return msgRet; } /// Generate code for a message send expression. @@ -707,8 +710,10 @@ CGObjCGNU::GenerateMessageSend(CodeGen::CodeGenFunction &CGF, imp = Builder.CreateCall2(lookupFunction, Receiver, cmd); cast<llvm::CallInst>(imp)->setMetadata(msgSendMDKind, node); } + llvm::Instruction *call; RValue msgRet = CGF.EmitCall(FnInfo, imp, ReturnValueSlot(), ActualArgs, - 0, msgSendMDKind, node); + 0, &call); + call->setMetadata(msgSendMDKind, node); if (!isPointerSizedReturn) { CGF.EmitBlock(contiueBB); diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index 7be895d71f..18d3aed46e 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -1114,8 +1114,7 @@ public: ReturnValueSlot ReturnValue, const CallArgList &Args, const Decl *TargetDecl = 0, - unsigned MDKind = 0, - llvm::MDNode *Metadata = 0); + llvm::Instruction **callOrInvoke = 0); RValue EmitCall(QualType FnType, llvm::Value *Callee, ReturnValueSlot ReturnValue, |