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 | llvm-ff5f88c38e081397bf2c1a0ee6328bdd49e6b670.zip llvm-ff5f88c38e081397bf2c1a0ee6328bdd49e6b670.tar.gz llvm-ff5f88c38e081397bf2c1a0ee6328bdd49e6b670.tar.bz2 | |
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 f7db0d1..92d15d9 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 8afce62..3c51b7e 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 7be895d..18d3aed 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, |
