forked from OSchip/llvm-project
[OPENMP] Update codegen for 'omp flush' directive.
__kmpc_omp_flush() runtime library now has only one argument and is not a vararg anymore. This update makes the codegen compatible with these changes. llvm-svn: 230331
This commit is contained in:
parent
f6d58a2a1f
commit
d76df6d0ff
|
@ -452,10 +452,10 @@ CGOpenMPRuntime::CreateRuntimeFunction(OpenMPRTLFunction Function) {
|
|||
break;
|
||||
}
|
||||
case OMPRTL__kmpc_flush: {
|
||||
// Build void __kmpc_flush(ident_t *loc, ...);
|
||||
// Build void __kmpc_flush(ident_t *loc);
|
||||
llvm::Type *TypeParams[] = {getIdentTyPointerTy()};
|
||||
llvm::FunctionType *FnTy =
|
||||
llvm::FunctionType::get(CGM.VoidTy, TypeParams, /*isVarArg*/ true);
|
||||
llvm::FunctionType::get(CGM.VoidTy, TypeParams, /*isVarArg*/ false);
|
||||
RTLFn = CGM.CreateRuntimeFunction(FnTy, "__kmpc_flush");
|
||||
break;
|
||||
}
|
||||
|
@ -986,11 +986,7 @@ void CGOpenMPRuntime::EmitOMPNumThreadsClause(CodeGenFunction &CGF,
|
|||
|
||||
void CGOpenMPRuntime::EmitOMPFlush(CodeGenFunction &CGF, ArrayRef<const Expr *>,
|
||||
SourceLocation Loc) {
|
||||
// Build call void __kmpc_flush(ident_t *loc, ...)
|
||||
// FIXME: List of variables is ignored by libiomp5 runtime, no need to
|
||||
// generate it, just request full memory fence.
|
||||
llvm::Value *Args[] = {EmitOpenMPUpdateLocation(CGF, Loc),
|
||||
llvm::ConstantInt::get(CGM.Int32Ty, 0)};
|
||||
// Build call void __kmpc_flush(ident_t *loc)
|
||||
auto *RTLFn = CreateRuntimeFunction(OMPRTL__kmpc_flush);
|
||||
CGF.EmitRuntimeCall(RTLFn, Args);
|
||||
CGF.EmitRuntimeCall(RTLFn, EmitOpenMPUpdateLocation(CGF, Loc));
|
||||
}
|
||||
|
|
|
@ -82,7 +82,7 @@ private:
|
|||
// Call to void __kmpc_push_num_threads(ident_t *loc, kmp_int32 global_tid,
|
||||
// kmp_int32 num_threads);
|
||||
OMPRTL__kmpc_push_num_threads,
|
||||
// Call to void __kmpc_flush(ident_t *loc, ...);
|
||||
// Call to void __kmpc_flush(ident_t *loc);
|
||||
OMPRTL__kmpc_flush,
|
||||
// Call to kmp_int32 __kmpc_master(ident_t *, kmp_int32 global_tid);
|
||||
OMPRTL__kmpc_master,
|
||||
|
|
|
@ -19,16 +19,16 @@ int main() {
|
|||
static int a;
|
||||
#pragma omp flush
|
||||
#pragma omp flush(a)
|
||||
// CHECK: call void (%{{.+}}*, ...)* @__kmpc_flush(%{{.+}}* {{(@|%).+}}, i32 0)
|
||||
// CHECK: call void (%{{.+}}*, ...)* @__kmpc_flush(%{{.+}}* {{(@|%).+}}, i32 0)
|
||||
// CHECK: call void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
|
||||
// CHECK: call void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
|
||||
return tmain(a);
|
||||
// CHECK: call {{.*}} [[TMAIN:@.+]](
|
||||
// CHECK: ret
|
||||
}
|
||||
|
||||
// CHECK: [[TMAIN]]
|
||||
// CHECK: call void (%{{.+}}*, ...)* @__kmpc_flush(%{{.+}}* {{(@|%).+}}, i32 0)
|
||||
// CHECK: call void (%{{.+}}*, ...)* @__kmpc_flush(%{{.+}}* {{(@|%).+}}, i32 0)
|
||||
// CHECK: call void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
|
||||
// CHECK: call void @__kmpc_flush(%{{.+}}* {{(@|%).+}})
|
||||
// CHECK: ret
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue