[llvm-commits] [llvm] r73646 - /llvm/trunk/include/llvm/Support/IRBuilder.h
Chris Lattner
clattner at apple.com
Wed Jun 17 17:39:12 PDT 2009
On Jun 17, 2009, at 3:20 PM, Anton Korobeynikov wrote:
> Author: asl
> Date: Wed Jun 17 17:20:46 2009
> New Revision: 73646
>
> URL: http://llvm.org/viewvc/llvm-project?rev=73646&view=rev
> Log:
> Honour calling convention and attributes of Callee by default.
Anton, why isn't the caller and callee already getting the right
calling conv? This seems like the wrong fix,
-Chris
>
>
> Modified:
> llvm/trunk/include/llvm/Support/IRBuilder.h
>
> Modified: llvm/trunk/include/llvm/Support/IRBuilder.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/IRBuilder.h?rev=73646&r1=73645&r2=73646&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/include/llvm/Support/IRBuilder.h (original)
> +++ llvm/trunk/include/llvm/Support/IRBuilder.h Wed Jun 17 17:20:46
> 2009
> @@ -17,6 +17,7 @@
>
> #include "llvm/Constants.h"
> #include "llvm/Instructions.h"
> +#include "llvm/GlobalAlias.h"
> #include "llvm/GlobalVariable.h"
> #include "llvm/Function.h"
> #include "llvm/Support/ConstantFolder.h"
> @@ -586,32 +587,49 @@
> return Insert(PHINode::Create(Ty), Name);
> }
>
> + CallInst *TransferAttributes(CallInst *CI, const Value* Callee)
> const {
> + if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(Callee))
> + Callee = GA->getAliasedGlobal();
> +
> + if (const Function *F = dyn_cast<Function>(Callee)) {
> + CI->setCallingConv(F->getCallingConv());
> + CI->setAttributes(F->getAttributes());
> + }
> +
> + return CI;
> + }
> +
> CallInst *CreateCall(Value *Callee, const char *Name = "") {
> - return Insert(CallInst::Create(Callee), Name);
> + return Insert(TransferAttributes(CallInst::Create(Callee),
> Callee), Name);
> }
> CallInst *CreateCall(Value *Callee, Value *Arg, const char *Name =
> "") {
> - return Insert(CallInst::Create(Callee, Arg), Name);
> + return Insert(TransferAttributes(CallInst::Create(Callee, Arg),
> + Callee), Name);
> }
> CallInst *CreateCall2(Value *Callee, Value *Arg1, Value *Arg2,
> const char *Name = "") {
> Value *Args[] = { Arg1, Arg2 };
> - return Insert(CallInst::Create(Callee, Args, Args+2), Name);
> + return Insert(TransferAttributes(CallInst::Create(Callee, Args,
> Args+2),
> + Callee), Name);
> }
> CallInst *CreateCall3(Value *Callee, Value *Arg1, Value *Arg2,
> Value *Arg3,
> const char *Name = "") {
> Value *Args[] = { Arg1, Arg2, Arg3 };
> - return Insert(CallInst::Create(Callee, Args, Args+3), Name);
> + return Insert(TransferAttributes(CallInst::Create(Callee, Args,
> Args+3),
> + Callee), Name);
> }
> CallInst *CreateCall4(Value *Callee, Value *Arg1, Value *Arg2,
> Value *Arg3,
> Value *Arg4, const char *Name = "") {
> Value *Args[] = { Arg1, Arg2, Arg3, Arg4 };
> - return Insert(CallInst::Create(Callee, Args, Args+4), Name);
> + return Insert(TransferAttributes(CallInst::Create(Callee, Args,
> Args+4),
> + Callee), Name);
> }
>
> template<typename InputIterator>
> CallInst *CreateCall(Value *Callee, InputIterator ArgBegin,
> InputIterator ArgEnd, const char *Name = "") {
> - return Insert(CallInst::Create(Callee, ArgBegin, ArgEnd), Name);
> + return Insert(TransferAttributes(CallInst::Create(Callee,
> ArgBegin, ArgEnd),
> + Callee), Name);
> }
>
> Value *CreateSelect(Value *C, Value *True, Value *False,
>
>
> _______________________________________________
> 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