[polly] 5bd1b93 - Move CallInst::CreateFree to IRBuilderBase
Konrad Kleine via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 19 03:04:32 PDT 2023
Author: Konrad Kleine
Date: 2023-09-19T12:04:17+02:00
New Revision: 5bd1b93cb2208c8889c8ca7283499d40aaf06e39
URL: https://github.com/llvm/llvm-project/commit/5bd1b93cb2208c8889c8ca7283499d40aaf06e39
DIFF: https://github.com/llvm/llvm-project/commit/5bd1b93cb2208c8889c8ca7283499d40aaf06e39.diff
LOG: Move CallInst::CreateFree to IRBuilderBase
Similarly to D158861 I'm moving the `CreateFree` method from `CallInst` to `IRBuilderBase`.
Differential Revision: https://reviews.llvm.org/D159418
Added:
Modified:
llvm/examples/BrainF/BrainF.cpp
llvm/include/llvm/IR/IRBuilder.h
llvm/include/llvm/IR/Instructions.h
llvm/lib/IR/Core.cpp
llvm/lib/IR/IRBuilder.cpp
llvm/lib/IR/Instructions.cpp
llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp
polly/lib/CodeGen/IslNodeBuilder.cpp
Removed:
################################################################################
diff --git a/llvm/examples/BrainF/BrainF.cpp b/llvm/examples/BrainF/BrainF.cpp
index 8f09d1d016ea591..849e5c7675307ec 100644
--- a/llvm/examples/BrainF/BrainF.cpp
+++ b/llvm/examples/BrainF/BrainF.cpp
@@ -125,8 +125,9 @@ void BrainF::header(LLVMContext& C) {
//brainf.end:
endbb = BasicBlock::Create(C, label, brainf_func);
- //call free(i8 *%arr)
- CallInst::CreateFree(ptr_arr, endbb)->insertInto(endbb, endbb->end());
+ // call free(i8 *%arr)
+ builder->SetInsertPoint(endbb);
+ builder->CreateFree(ptr_arr);
//ret void
ReturnInst::Create(C, endbb);
diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h
index de5ce77d529ffd2..86be257918cacfa 100644
--- a/llvm/include/llvm/IR/IRBuilder.h
+++ b/llvm/include/llvm/IR/IRBuilder.h
@@ -631,6 +631,9 @@ class IRBuilderBase {
CallInst *CreateMalloc(Type *IntPtrTy, Type *AllocTy, Value *AllocSize,
Value *ArraySize, Function *MallocF = nullptr,
const Twine &Name = "");
+ /// Generate the IR for a call to the builtin free function.
+ CallInst *CreateFree(Value *Source,
+ ArrayRef<OperandBundleDef> Bundles = std::nullopt);
CallInst *CreateElementUnorderedAtomicMemSet(Value *Ptr, Value *Val,
Value *Size, Align Alignment,
diff --git a/llvm/include/llvm/IR/Instructions.h b/llvm/include/llvm/IR/Instructions.h
index 2962459f8b3b1d3..a0c8406fe4ec1e5 100644
--- a/llvm/include/llvm/IR/Instructions.h
+++ b/llvm/include/llvm/IR/Instructions.h
@@ -1603,16 +1603,6 @@ class CallInst : public CallBase {
static CallInst *Create(CallInst *CI, ArrayRef<OperandBundleDef> Bundles,
Instruction *InsertPt = nullptr);
- /// Generate the IR for a call to the builtin free function.
- static Instruction *CreateFree(Value *Source, Instruction *InsertBefore);
- static Instruction *CreateFree(Value *Source, BasicBlock *InsertAtEnd);
- static Instruction *CreateFree(Value *Source,
- ArrayRef<OperandBundleDef> Bundles,
- Instruction *InsertBefore);
- static Instruction *CreateFree(Value *Source,
- ArrayRef<OperandBundleDef> Bundles,
- BasicBlock *InsertAtEnd);
-
// Note that 'musttail' implies 'tail'.
enum TailCallKind : unsigned {
TCK_None = 0,
diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp
index 6b642adb4c30ffc..71aec8bdf6f356c 100644
--- a/llvm/lib/IR/Core.cpp
+++ b/llvm/lib/IR/Core.cpp
@@ -3583,8 +3583,7 @@ LLVMValueRef LLVMBuildArrayAlloca(LLVMBuilderRef B, LLVMTypeRef Ty,
}
LLVMValueRef LLVMBuildFree(LLVMBuilderRef B, LLVMValueRef PointerVal) {
- return wrap(unwrap(B)->Insert(
- CallInst::CreateFree(unwrap(PointerVal), unwrap(B)->GetInsertBlock())));
+ return wrap(unwrap(B)->CreateFree(unwrap(PointerVal)));
}
LLVMValueRef LLVMBuildLoad2(LLVMBuilderRef B, LLVMTypeRef Ty,
diff --git a/llvm/lib/IR/IRBuilder.cpp b/llvm/lib/IR/IRBuilder.cpp
index a33e821000bdc26..b321d8b325fe0be 100644
--- a/llvm/lib/IR/IRBuilder.cpp
+++ b/llvm/lib/IR/IRBuilder.cpp
@@ -349,6 +349,26 @@ CallInst *IRBuilderBase::CreateMalloc(Type *IntPtrTy, Type *AllocTy,
MallocF, Name);
}
+/// CreateFree - Generate the IR for a call to the builtin free function.
+CallInst *IRBuilderBase::CreateFree(Value *Source,
+ ArrayRef<OperandBundleDef> Bundles) {
+ assert(Source->getType()->isPointerTy() &&
+ "Can not free something of nonpointer type!");
+
+ Module *M = BB->getParent()->getParent();
+
+ Type *VoidTy = Type::getVoidTy(M->getContext());
+ Type *VoidPtrTy = PointerType::getUnqual(M->getContext());
+ // prototype free as "void free(void*)"
+ FunctionCallee FreeFunc = M->getOrInsertFunction("free", VoidTy, VoidPtrTy);
+ CallInst *Result = CreateCall(FreeFunc, Source, Bundles, "");
+ Result->setTailCall();
+ if (Function *F = dyn_cast<Function>(FreeFunc.getCallee()))
+ Result->setCallingConv(F->getCallingConv());
+
+ return Result;
+}
+
CallInst *IRBuilderBase::CreateElementUnorderedAtomicMemMove(
Value *Dst, Align DstAlign, Value *Src, Align SrcAlign, Value *Size,
uint32_t ElementSize, MDNode *TBAATag, MDNode *TBAAStructTag,
diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp
index ea8cd108cadeb9e..81dfa14f2e6b57e 100644
--- a/llvm/lib/IR/Instructions.cpp
+++ b/llvm/lib/IR/Instructions.cpp
@@ -809,61 +809,6 @@ void CallInst::updateProfWeight(uint64_t S, uint64_t T) {
setMetadata(LLVMContext::MD_prof, MDNode::get(getContext(), Vals));
}
-static Instruction *createFree(Value *Source,
- ArrayRef<OperandBundleDef> Bundles,
- Instruction *InsertBefore,
- BasicBlock *InsertAtEnd) {
- assert(((!InsertBefore && InsertAtEnd) || (InsertBefore && !InsertAtEnd)) &&
- "createFree needs either InsertBefore or InsertAtEnd");
- assert(Source->getType()->isPointerTy() &&
- "Can not free something of nonpointer type!");
-
- BasicBlock *BB = InsertBefore ? InsertBefore->getParent() : InsertAtEnd;
- Module *M = BB->getParent()->getParent();
-
- Type *VoidTy = Type::getVoidTy(M->getContext());
- Type *VoidPtrTy = PointerType::getUnqual(M->getContext());
- // prototype free as "void free(void*)"
- FunctionCallee FreeFunc = M->getOrInsertFunction("free", VoidTy, VoidPtrTy);
- CallInst *Result = nullptr;
- if (InsertBefore)
- Result = CallInst::Create(FreeFunc, Source, Bundles, "", InsertBefore);
- else
- Result = CallInst::Create(FreeFunc, Source, Bundles, "");
- Result->setTailCall();
- if (Function *F = dyn_cast<Function>(FreeFunc.getCallee()))
- Result->setCallingConv(F->getCallingConv());
-
- return Result;
-}
-
-/// CreateFree - Generate the IR for a call to the builtin free function.
-Instruction *CallInst::CreateFree(Value *Source, Instruction *InsertBefore) {
- return createFree(Source, std::nullopt, InsertBefore, nullptr);
-}
-Instruction *CallInst::CreateFree(Value *Source,
- ArrayRef<OperandBundleDef> Bundles,
- Instruction *InsertBefore) {
- return createFree(Source, Bundles, InsertBefore, nullptr);
-}
-
-/// CreateFree - Generate the IR for a call to the builtin free function.
-/// Note: This function does not add the call to the basic block, that is the
-/// responsibility of the caller.
-Instruction *CallInst::CreateFree(Value *Source, BasicBlock *InsertAtEnd) {
- Instruction *FreeCall =
- createFree(Source, std::nullopt, nullptr, InsertAtEnd);
- assert(FreeCall && "CreateFree did not create a CallInst");
- return FreeCall;
-}
-Instruction *CallInst::CreateFree(Value *Source,
- ArrayRef<OperandBundleDef> Bundles,
- BasicBlock *InsertAtEnd) {
- Instruction *FreeCall = createFree(Source, Bundles, nullptr, InsertAtEnd);
- assert(FreeCall && "CreateFree did not create a CallInst");
- return FreeCall;
-}
-
//===----------------------------------------------------------------------===//
// InvokeInst Implementation
//===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp
index d7cf703f9d8d166..5e84fff351b23d1 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp
@@ -1401,14 +1401,9 @@ bool WebAssemblyLowerEmscriptenEHSjLj::runSjLjOnFunction(Function &F) {
if (auto *CB = dyn_cast<CallBase>(I))
if (auto Bundle = CB->getOperandBundle(LLVMContext::OB_funclet))
Bundles.push_back(OperandBundleDef(*Bundle));
- auto *Free = CallInst::CreateFree(SetjmpTable, Bundles, I);
+ IRB.SetInsertPoint(I);
+ auto *Free = IRB.CreateFree(SetjmpTable, Bundles);
Free->setDebugLoc(DL);
- // CallInst::CreateFree may create a bitcast instruction if its argument
- // types mismatch. We need to set the debug loc for the bitcast too.
- if (auto *FreeCallI = dyn_cast<CallInst>(Free)) {
- if (auto *BitCastI = dyn_cast<BitCastInst>(FreeCallI->getArgOperand(0)))
- BitCastI->setDebugLoc(DL);
- }
}
// Every call to saveSetjmp can change setjmpTable and setjmpTableSize
diff --git a/polly/lib/CodeGen/IslNodeBuilder.cpp b/polly/lib/CodeGen/IslNodeBuilder.cpp
index e0a06a246a17d59..a226cc2a1b25065 100644
--- a/polly/lib/CodeGen/IslNodeBuilder.cpp
+++ b/polly/lib/CodeGen/IslNodeBuilder.cpp
@@ -1302,8 +1302,8 @@ void IslNodeBuilder::allocateNewArrays(BBPair StartExitBlocks) {
SAI->setBasePtr(CreatedArray);
// Insert the free call at polly.exiting
- CallInst::CreateFree(CreatedArray,
- std::get<1>(StartExitBlocks)->getTerminator());
+ Builder.SetInsertPoint(std::get<1>(StartExitBlocks)->getTerminator());
+ Builder.CreateFree(CreatedArray);
} else {
auto InstIt = Builder.GetInsertBlock()
->getParent()
More information about the llvm-commits
mailing list