diff options
author | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 18:43:11 +0900 |
---|---|---|
committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 18:43:11 +0900 |
commit | 0e1a753549b29ff1f5a190aca83b803a33b51628 (patch) | |
tree | e5578f8810c65711304128d0c8add7fa1f77b9d8 /clang/lib/CodeGen/CGStmt.cpp | |
parent | 3c6252260ee11e3a453076b4d96ffffe20d49998 (diff) | |
parent | bdcf47e4bcb92889665825654bb80a8bbe30379e (diff) | |
download | llvm-users/chapuni/cov/single/if.zip llvm-users/chapuni/cov/single/if.tar.gz llvm-users/chapuni/cov/single/if.tar.bz2 |
Merge branch 'users/chapuni/cov/single/base' into users/chapuni/cov/single/ifusers/chapuni/cov/single/if
Conflicts:
clang/lib/CodeGen/CoverageMappingGen.cpp
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 9ce9b29..b35d27d 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; } } @@ -1022,8 +1028,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. @@ -1150,8 +1156,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); @@ -1229,8 +1234,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, @@ -1367,8 +1371,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, @@ -3244,35 +3247,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); @@ -3283,14 +3283,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; @@ -3305,5 +3305,5 @@ CodeGenFunction::getOrEmitConvergenceEntryToken(llvm::Function *F) { assert(isa<llvm::IntrinsicInst>(I)); Builder.restoreIP(IP); - return cast<llvm::IntrinsicInst>(I); + return cast<llvm::ConvergenceControlInst>(I); } |