StringRef CriticalName,
const RegionCodeGenTy &CriticalOpGen,
SourceLocation Loc) {
- auto RegionLock = getCriticalRegionLock(CriticalName);
+ auto *RegionLock = getCriticalRegionLock(CriticalName);
// __kmpc_critical(ident_t *, gtid, Lock);
// CriticalOpGen();
// __kmpc_end_critical(ident_t *, gtid, Lock);
// Prepare arguments and build a call to __kmpc_critical
- llvm::Value *Args[] = {emitUpdateLocation(CGF, Loc), getThreadID(CGF, Loc),
- RegionLock};
{
CodeGenFunction::RunCleanupsScope Scope(CGF);
+ auto *ULoc = emitUpdateLocation(CGF, Loc);
+ auto *ThreadID = getThreadID(CGF, Loc);
+ llvm::Value *Args[] = {ULoc, ThreadID, RegionLock};
CGF.EmitRuntimeCall(createRuntimeFunction(OMPRTL__kmpc_critical), Args);
emitInlinedDirective(CGF, CriticalOpGen);
// Build a call to __kmpc_end_critical
CGF.EHStack.pushCleanup<CallEndCleanup>(
- NormalAndEHCleanup, [this, Args](CodeGenFunction &CGF) {
+ NormalAndEHCleanup,
+ [this, ULoc, ThreadID, RegionLock](CodeGenFunction &CGF) {
+ llvm::Value *Args[] = {ULoc, ThreadID, RegionLock};
CGF.EmitRuntimeCall(createRuntimeFunction(OMPRTL__kmpc_end_critical),
Args);
});
// __kmpc_end_master(ident_t *, gtid);
// }
// Prepare arguments and build a call to __kmpc_master
- llvm::Value *Args[] = {emitUpdateLocation(CGF, Loc), getThreadID(CGF, Loc)};
+ auto *ULoc = emitUpdateLocation(CGF, Loc);
+ auto *ThreadID = getThreadID(CGF, Loc);
+ llvm::Value *Args[] = {ULoc, ThreadID};
auto *IsMaster =
CGF.EmitRuntimeCall(createRuntimeFunction(OMPRTL__kmpc_master), Args);
emitIfStmt(CGF, IsMaster, [&](CodeGenFunction &CGF) -> void {
// fallthrough rather than pushing a normal cleanup for it.
// Build a call to __kmpc_end_critical
CGF.EHStack.pushCleanup<CallEndCleanup>(
- NormalAndEHCleanup, [this, Args](CodeGenFunction &CGF) {
+ NormalAndEHCleanup, [this, ULoc, ThreadID](CodeGenFunction &CGF) {
+ llvm::Value *Args[] = {ULoc, ThreadID};
CGF.EmitRuntimeCall(createRuntimeFunction(OMPRTL__kmpc_end_master),
Args);
});
CGF.InitTempAlloca(DidIt, CGF.Builder.getInt32(0));
}
// Prepare arguments and build a call to __kmpc_single
- llvm::Value *Args[] = {emitUpdateLocation(CGF, Loc), getThreadID(CGF, Loc)};
+ auto *ULoc = emitUpdateLocation(CGF, Loc);
+ auto *ThreadID = getThreadID(CGF, Loc);
+ llvm::Value *Args[] = {ULoc, ThreadID};
auto *IsSingle =
CGF.EmitRuntimeCall(createRuntimeFunction(OMPRTL__kmpc_single), Args);
emitIfStmt(CGF, IsSingle, [&](CodeGenFunction &CGF) -> void {
// It is analyzed in Sema, so we can just call __kmpc_end_single() on
// fallthrough rather than pushing a normal cleanup for it.
CGF.EHStack.pushCleanup<CallEndCleanup>(
- NormalAndEHCleanup, [this, Args](CodeGenFunction &CGF) {
+ NormalAndEHCleanup, [this, ULoc, ThreadID](CodeGenFunction &CGF) {
+ llvm::Value *Args[] = {ULoc, ThreadID};
CGF.EmitRuntimeCall(createRuntimeFunction(OMPRTL__kmpc_end_single),
Args);
});