diff options
Diffstat (limited to 'clang/lib/CodeGen/CGStmt.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGStmt.cpp | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/clang/lib/CodeGen/CGStmt.cpp b/clang/lib/CodeGen/CGStmt.cpp index df19233..d086ff9 100644 --- a/clang/lib/CodeGen/CGStmt.cpp +++ b/clang/lib/CodeGen/CGStmt.cpp @@ -480,6 +480,12 @@ void CodeGenFunction::EmitStmt(const Stmt *S, ArrayRef<const Attr *> Attrs) { case Stmt::OpenACCShutdownConstructClass: EmitOpenACCShutdownConstruct(cast<OpenACCShutdownConstruct>(*S)); break; + case Stmt::OpenACCSetConstructClass: + EmitOpenACCSetConstruct(cast<OpenACCSetConstruct>(*S)); + break; + case Stmt::OpenACCUpdateConstructClass: + EmitOpenACCUpdateConstruct(cast<OpenACCUpdateConstruct>(*S)); + break; } } @@ -1026,8 +1032,8 @@ void CodeGenFunction::EmitWhileStmt(const WhileStmt &S, EmitBlock(LoopHeader.getBlock()); if (CGM.shouldEmitConvergenceTokens()) - ConvergenceTokenStack.push_back(emitConvergenceLoopToken( - LoopHeader.getBlock(), ConvergenceTokenStack.back())); + ConvergenceTokenStack.push_back( + emitConvergenceLoopToken(LoopHeader.getBlock())); // Create an exit block for when the condition fails, which will // also become the break target. @@ -1154,8 +1160,7 @@ void CodeGenFunction::EmitDoStmt(const DoStmt &S, EmitBlockWithFallThrough(LoopBody, &S); if (CGM.shouldEmitConvergenceTokens()) - ConvergenceTokenStack.push_back( - emitConvergenceLoopToken(LoopBody, ConvergenceTokenStack.back())); + ConvergenceTokenStack.push_back(emitConvergenceLoopToken(LoopBody)); { RunCleanupsScope BodyScope(*this); @@ -1233,8 +1238,7 @@ void CodeGenFunction::EmitForStmt(const ForStmt &S, EmitBlock(CondBlock); if (CGM.shouldEmitConvergenceTokens()) - ConvergenceTokenStack.push_back( - emitConvergenceLoopToken(CondBlock, ConvergenceTokenStack.back())); + ConvergenceTokenStack.push_back(emitConvergenceLoopToken(CondBlock)); const SourceRange &R = S.getSourceRange(); LoopStack.push(CondBlock, CGM.getContext(), CGM.getCodeGenOpts(), ForAttrs, @@ -1371,8 +1375,7 @@ CodeGenFunction::EmitCXXForRangeStmt(const CXXForRangeStmt &S, EmitBlock(CondBlock); if (CGM.shouldEmitConvergenceTokens()) - ConvergenceTokenStack.push_back( - emitConvergenceLoopToken(CondBlock, ConvergenceTokenStack.back())); + ConvergenceTokenStack.push_back(emitConvergenceLoopToken(CondBlock)); const SourceRange &R = S.getSourceRange(); LoopStack.push(CondBlock, CGM.getContext(), CGM.getCodeGenOpts(), ForAttrs, @@ -3260,35 +3263,32 @@ CodeGenFunction::GenerateCapturedStmtFunction(const CapturedStmt &S) { return F; } -namespace { // Returns the first convergence entry/loop/anchor instruction found in |BB|. // std::nullptr otherwise. -llvm::IntrinsicInst *getConvergenceToken(llvm::BasicBlock *BB) { +static llvm::ConvergenceControlInst *getConvergenceToken(llvm::BasicBlock *BB) { for (auto &I : *BB) { - auto *II = dyn_cast<llvm::IntrinsicInst>(&I); - if (II && llvm::isConvergenceControlIntrinsic(II->getIntrinsicID())) - return II; + if (auto *CI = dyn_cast<llvm::ConvergenceControlInst>(&I)) + return CI; } return nullptr; } -} // namespace - llvm::CallBase * -CodeGenFunction::addConvergenceControlToken(llvm::CallBase *Input, - llvm::Value *ParentToken) { +CodeGenFunction::addConvergenceControlToken(llvm::CallBase *Input) { + llvm::ConvergenceControlInst *ParentToken = ConvergenceTokenStack.back(); + assert(ParentToken); + llvm::Value *bundleArgs[] = {ParentToken}; llvm::OperandBundleDef OB("convergencectrl", bundleArgs); - auto Output = llvm::CallBase::addOperandBundle( + auto *Output = llvm::CallBase::addOperandBundle( Input, llvm::LLVMContext::OB_convergencectrl, OB, Input->getIterator()); Input->replaceAllUsesWith(Output); Input->eraseFromParent(); return Output; } -llvm::IntrinsicInst * -CodeGenFunction::emitConvergenceLoopToken(llvm::BasicBlock *BB, - llvm::Value *ParentToken) { +llvm::ConvergenceControlInst * +CodeGenFunction::emitConvergenceLoopToken(llvm::BasicBlock *BB) { CGBuilderTy::InsertPoint IP = Builder.saveIP(); if (BB->empty()) Builder.SetInsertPoint(BB); @@ -3299,14 +3299,14 @@ CodeGenFunction::emitConvergenceLoopToken(llvm::BasicBlock *BB, llvm::Intrinsic::experimental_convergence_loop, {}, {}); Builder.restoreIP(IP); - llvm::CallBase *I = addConvergenceControlToken(CB, ParentToken); - return cast<llvm::IntrinsicInst>(I); + CB = addConvergenceControlToken(CB); + return cast<llvm::ConvergenceControlInst>(CB); } -llvm::IntrinsicInst * +llvm::ConvergenceControlInst * CodeGenFunction::getOrEmitConvergenceEntryToken(llvm::Function *F) { llvm::BasicBlock *BB = &F->getEntryBlock(); - llvm::IntrinsicInst *Token = getConvergenceToken(BB); + llvm::ConvergenceControlInst *Token = getConvergenceToken(BB); if (Token) return Token; @@ -3321,5 +3321,5 @@ CodeGenFunction::getOrEmitConvergenceEntryToken(llvm::Function *F) { assert(isa<llvm::IntrinsicInst>(I)); Builder.restoreIP(IP); - return cast<llvm::IntrinsicInst>(I); + return cast<llvm::ConvergenceControlInst>(I); } |