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 | ff5f88c38e081397bf2c1a0ee6328bdd49e6b670 (patch) | |
tree | 2a3c3eb52f2c2dbb482a57aaf4318b69373de234 /clang/lib/CodeGen | |
parent | b139cd58433f0275235340dbedf7a570308774ca (diff) | |
download | bcm5719-llvm-ff5f88c38e081397bf2c1a0ee6328bdd49e6b670.tar.gz bcm5719-llvm-ff5f88c38e081397bf2c1a0ee6328bdd49e6b670.zip |
As per Chris' request, return the Instruction from EmitCall and add the metadata in the caller.
llvm-svn: 102862
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGCall.cpp | 7 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGObjCGNU.cpp | 11 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.h | 3 |
3 files changed, 12 insertions, 9 deletions
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index f7db0d19a2a..92d15d9d8c9 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/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/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp index 8afce6204df..3c51b7ee9de 100644 --- a/clang/lib/CodeGen/CGObjCGNU.cpp +++ b/clang/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/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index 7be895d71fa..18d3aed46ef 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/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, |