llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-llvm-ir Author: Sameer Sahasrabuddhe (ssahasra) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/125627.diff 3 Files Affected: - (modified) clang/lib/CodeGen/CGStmt.cpp (+4-21) - (modified) llvm/include/llvm/IR/IntrinsicInst.h (+4) - (modified) llvm/lib/IR/IntrinsicInst.cpp (+23) ``````````diff diff --git a/clang/lib/CodeGen/CGStmt.cpp b/clang/lib/CodeGen/CGStmt.cpp index 7c944fe85a352d..f7aea9da9177a4 100644 --- a/clang/lib/CodeGen/CGStmt.cpp +++ b/clang/lib/CodeGen/CGStmt.cpp @@ -3303,18 +3303,9 @@ CodeGenFunction::addConvergenceControlToken(llvm::CallBase *Input) { llvm::ConvergenceControlInst * CodeGenFunction::emitConvergenceLoopToken(llvm::BasicBlock *BB) { - CGBuilderTy::InsertPoint IP = Builder.saveIP(); - if (BB->empty()) - Builder.SetInsertPoint(BB); - else - Builder.SetInsertPoint(BB->getFirstInsertionPt()); - - llvm::CallBase *CB = Builder.CreateIntrinsic( - llvm::Intrinsic::experimental_convergence_loop, {}, {}); - Builder.restoreIP(IP); - - CB = addConvergenceControlToken(CB); - return cast<llvm::ConvergenceControlInst>(CB); + llvm::ConvergenceControlInst *ParentToken = ConvergenceTokenStack.back(); + assert(ParentToken); + return llvm::ConvergenceControlInst::CreateLoop(*BB, ParentToken); } llvm::ConvergenceControlInst * @@ -3327,13 +3318,5 @@ CodeGenFunction::getOrEmitConvergenceEntryToken(llvm::Function *F) { // Adding a convergence token requires the function to be marked as // convergent. F->setConvergent(); - - CGBuilderTy::InsertPoint IP = Builder.saveIP(); - Builder.SetInsertPoint(&BB->front()); - llvm::CallBase *I = Builder.CreateIntrinsic( - llvm::Intrinsic::experimental_convergence_entry, {}, {}); - assert(isa<llvm::IntrinsicInst>(I)); - Builder.restoreIP(IP); - - return cast<llvm::ConvergenceControlInst>(I); + return llvm::ConvergenceControlInst::CreateEntry(*BB); } diff --git a/llvm/include/llvm/IR/IntrinsicInst.h b/llvm/include/llvm/IR/IntrinsicInst.h index 6ccbb6b185c7d9..ba7a0219ebcaef 100644 --- a/llvm/include/llvm/IR/IntrinsicInst.h +++ b/llvm/include/llvm/IR/IntrinsicInst.h @@ -1882,6 +1882,10 @@ class ConvergenceControlInst : public IntrinsicInst { bool isLoop() const { return getIntrinsicID() == Intrinsic::experimental_convergence_loop; } + + static ConvergenceControlInst* CreateAnchor(BasicBlock &BB); + static ConvergenceControlInst* CreateEntry(BasicBlock &BB); + static ConvergenceControlInst* CreateLoop(BasicBlock &BB, ConvergenceControlInst *Parent); }; } // end namespace llvm diff --git a/llvm/lib/IR/IntrinsicInst.cpp b/llvm/lib/IR/IntrinsicInst.cpp index ad174b1487a643..eb358b9fdea1e1 100644 --- a/llvm/lib/IR/IntrinsicInst.cpp +++ b/llvm/lib/IR/IntrinsicInst.cpp @@ -885,3 +885,26 @@ Value *GCRelocateInst::getDerivedPtr() const { return *(Opt->Inputs.begin() + getDerivedPtrIndex()); return *(GCInst->arg_begin() + getDerivedPtrIndex()); } + +ConvergenceControlInst *ConvergenceControlInst::CreateAnchor(BasicBlock &BB) { + Module *M = BB.getModule(); + Function *Fn = Intrinsic::getOrInsertDeclaration(M, llvm::Intrinsic::experimental_convergence_anchor); + auto *Call = CallInst::Create(Fn, "", BB.getFirstInsertionPt()); + return cast<ConvergenceControlInst>(Call); +} + +ConvergenceControlInst *ConvergenceControlInst::CreateEntry(BasicBlock &BB) { + Module *M = BB.getModule(); + Function *Fn = Intrinsic::getOrInsertDeclaration(M, llvm::Intrinsic::experimental_convergence_entry); + auto *Call = CallInst::Create(Fn, "", BB.getFirstInsertionPt()); + return cast<ConvergenceControlInst>(Call); +} + +ConvergenceControlInst *ConvergenceControlInst::CreateLoop(BasicBlock &BB, ConvergenceControlInst *ParentToken) { + Module *M = BB.getModule(); + Function *Fn = Intrinsic::getOrInsertDeclaration(M, llvm::Intrinsic::experimental_convergence_loop); + llvm::Value *BundleArgs[] = {ParentToken}; + llvm::OperandBundleDef OB("convergencectrl", BundleArgs); + auto *Call = CallInst::Create(Fn, {}, {OB}, "", BB.getFirstInsertionPt()); + return cast<ConvergenceControlInst>(Call); +} `````````` </details> https://github.com/llvm/llvm-project/pull/125627 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits