Skip to content

Commit b85e71b

Browse files
authored
[llvm] Create() functions for ConvergenceControlInst (llvm#125627)
1 parent d5a2638 commit b85e71b

File tree

3 files changed

+37
-21
lines changed

3 files changed

+37
-21
lines changed

clang/lib/CodeGen/CGStmt.cpp

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3305,18 +3305,9 @@ CodeGenFunction::addConvergenceControlToken(llvm::CallBase *Input) {
33053305

33063306
llvm::ConvergenceControlInst *
33073307
CodeGenFunction::emitConvergenceLoopToken(llvm::BasicBlock *BB) {
3308-
CGBuilderTy::InsertPoint IP = Builder.saveIP();
3309-
if (BB->empty())
3310-
Builder.SetInsertPoint(BB);
3311-
else
3312-
Builder.SetInsertPoint(BB->getFirstInsertionPt());
3313-
3314-
llvm::CallBase *CB = Builder.CreateIntrinsic(
3315-
llvm::Intrinsic::experimental_convergence_loop, {}, {});
3316-
Builder.restoreIP(IP);
3317-
3318-
CB = addConvergenceControlToken(CB);
3319-
return cast<llvm::ConvergenceControlInst>(CB);
3308+
llvm::ConvergenceControlInst *ParentToken = ConvergenceTokenStack.back();
3309+
assert(ParentToken);
3310+
return llvm::ConvergenceControlInst::CreateLoop(*BB, ParentToken);
33203311
}
33213312

33223313
llvm::ConvergenceControlInst *
@@ -3329,13 +3320,5 @@ CodeGenFunction::getOrEmitConvergenceEntryToken(llvm::Function *F) {
33293320
// Adding a convergence token requires the function to be marked as
33303321
// convergent.
33313322
F->setConvergent();
3332-
3333-
CGBuilderTy::InsertPoint IP = Builder.saveIP();
3334-
Builder.SetInsertPoint(&BB->front());
3335-
llvm::CallBase *I = Builder.CreateIntrinsic(
3336-
llvm::Intrinsic::experimental_convergence_entry, {}, {});
3337-
assert(isa<llvm::IntrinsicInst>(I));
3338-
Builder.restoreIP(IP);
3339-
3340-
return cast<llvm::ConvergenceControlInst>(I);
3323+
return llvm::ConvergenceControlInst::CreateEntry(*BB);
33413324
}

llvm/include/llvm/IR/IntrinsicInst.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1882,6 +1882,11 @@ class ConvergenceControlInst : public IntrinsicInst {
18821882
bool isLoop() const {
18831883
return getIntrinsicID() == Intrinsic::experimental_convergence_loop;
18841884
}
1885+
1886+
static ConvergenceControlInst *CreateAnchor(BasicBlock &BB);
1887+
static ConvergenceControlInst *CreateEntry(BasicBlock &BB);
1888+
static ConvergenceControlInst *CreateLoop(BasicBlock &BB,
1889+
ConvergenceControlInst *Parent);
18851890
};
18861891

18871892
} // end namespace llvm

llvm/lib/IR/IntrinsicInst.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -885,3 +885,31 @@ Value *GCRelocateInst::getDerivedPtr() const {
885885
return *(Opt->Inputs.begin() + getDerivedPtrIndex());
886886
return *(GCInst->arg_begin() + getDerivedPtrIndex());
887887
}
888+
889+
ConvergenceControlInst *ConvergenceControlInst::CreateAnchor(BasicBlock &BB) {
890+
Module *M = BB.getModule();
891+
Function *Fn = Intrinsic::getOrInsertDeclaration(
892+
M, llvm::Intrinsic::experimental_convergence_anchor);
893+
auto *Call = CallInst::Create(Fn, "", BB.getFirstInsertionPt());
894+
return cast<ConvergenceControlInst>(Call);
895+
}
896+
897+
ConvergenceControlInst *ConvergenceControlInst::CreateEntry(BasicBlock &BB) {
898+
Module *M = BB.getModule();
899+
Function *Fn = Intrinsic::getOrInsertDeclaration(
900+
M, llvm::Intrinsic::experimental_convergence_entry);
901+
auto *Call = CallInst::Create(Fn, "", BB.getFirstInsertionPt());
902+
return cast<ConvergenceControlInst>(Call);
903+
}
904+
905+
ConvergenceControlInst *
906+
ConvergenceControlInst::CreateLoop(BasicBlock &BB,
907+
ConvergenceControlInst *ParentToken) {
908+
Module *M = BB.getModule();
909+
Function *Fn = Intrinsic::getOrInsertDeclaration(
910+
M, llvm::Intrinsic::experimental_convergence_loop);
911+
llvm::Value *BundleArgs[] = {ParentToken};
912+
llvm::OperandBundleDef OB("convergencectrl", BundleArgs);
913+
auto *Call = CallInst::Create(Fn, {}, {OB}, "", BB.getFirstInsertionPt());
914+
return cast<ConvergenceControlInst>(Call);
915+
}

0 commit comments

Comments
 (0)