diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -2522,23 +2522,39 @@ OpBundles, Name, FPMathTag); } - // Deprecated [opaque pointer types] - CallInst *CreateCall(Value *Callee, ArrayRef Args = None, + // Ordinarily, the FunctionCallee overloads above should be sufficient. + // These Function * and InlineAsm * overloads are required to hide the + // deprecated Value * overloads below. + CallInst *CreateCall(Function *Fn, ArrayRef Args = None, const Twine &Name = "", MDNode *FPMathTag = nullptr) { - return CreateCall( - cast(Callee->getType()->getPointerElementType()), Callee, - Args, Name, FPMathTag); + return CreateCall(FunctionCallee{Fn}, Args, Name, FPMathTag); } - // Deprecated [opaque pointer types] - CallInst *CreateCall(Value *Callee, ArrayRef Args, + CallInst *CreateCall(Function *Fn, ArrayRef Args, ArrayRef OpBundles, const Twine &Name = "", MDNode *FPMathTag = nullptr) { - return CreateCall( - cast(Callee->getType()->getPointerElementType()), Callee, - Args, OpBundles, Name, FPMathTag); + return CreateCall(FunctionCallee{Fn}, Args, OpBundles, Name, FPMathTag); } + CallInst *CreateCall(InlineAsm *Fn, ArrayRef Args = None, + const Twine &Name = "", MDNode *FPMathTag = nullptr); + + CallInst *CreateCall(InlineAsm *Fn, ArrayRef Args, + ArrayRef OpBundles, + const Twine &Name = "", MDNode *FPMathTag = nullptr); + + // Deprecated [opaque pointer types] + LLVM_ATTRIBUTE_DEPRECATED(CallInst *CreateCall(Value *Callee, + ArrayRef Args = None, + const Twine &Name = "", + MDNode *FPMathTag = nullptr), + "Pointer types are opaque"); + LLVM_ATTRIBUTE_DEPRECATED( + CallInst *CreateCall(Value *Callee, ArrayRef Args, + ArrayRef OpBundles, + const Twine &Name = "", MDNode *FPMathTag = nullptr), + "Pointer types are opaque"); + CallInst *CreateConstrainedFPCall( Function *Callee, ArrayRef Args, const Twine &Name = "", Optional Rounding = None, @@ -3026,6 +3042,27 @@ InserterTy &getInserter() { return Inserter; } }; +// Deprecated [opaque pointer types] +inline CallInst *IRBuilderBase::CreateCall(Value *Callee, + ArrayRef Args, + const Twine &Name, + MDNode *FPMathTag) { + return CreateCall( + cast(Callee->getType()->getPointerElementType()), Callee, + Args, Name, FPMathTag); +} + +// Deprecated [opaque pointer types] +inline CallInst *IRBuilderBase::CreateCall(Value *Callee, + ArrayRef Args, + ArrayRef OpBundles, + const Twine &Name, + MDNode *FPMathTag) { + return CreateCall( + cast(Callee->getType()->getPointerElementType()), Callee, + Args, OpBundles, Name, FPMathTag); +} + // Create wrappers for C Binding types (see CBindingWrapping.h). DEFINE_SIMPLE_CONVERSION_FUNCTIONS(IRBuilder<>, LLVMBuilderRef) diff --git a/llvm/lib/IR/IRBuilder.cpp b/llvm/lib/IR/IRBuilder.cpp --- a/llvm/lib/IR/IRBuilder.cpp +++ b/llvm/lib/IR/IRBuilder.cpp @@ -20,6 +20,7 @@ #include "llvm/IR/Function.h" #include "llvm/IR/GlobalValue.h" #include "llvm/IR/GlobalVariable.h" +#include "llvm/IR/InlineAsm.h" #include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/Intrinsics.h" #include "llvm/IR/LLVMContext.h" @@ -767,6 +768,17 @@ return createCallHelper(Fn, Args, this, Name, FMFSource); } +CallInst *IRBuilderBase::CreateCall(InlineAsm *Fn, ArrayRef Args, + const Twine &Name, MDNode *FPMathTag) { + return CreateCall(FunctionCallee{Fn}, Args, Name, FPMathTag); +} + +CallInst *IRBuilderBase::CreateCall(InlineAsm *Fn, ArrayRef Args, + ArrayRef OpBundles, + const Twine &Name, MDNode *FPMathTag) { + return CreateCall(FunctionCallee{Fn}, Args, OpBundles, Name, FPMathTag); +} + IRBuilderDefaultInserter::~IRBuilderDefaultInserter() {} IRBuilderCallbackInserter::~IRBuilderCallbackInserter() {} IRBuilderFolder::~IRBuilderFolder() {}