forked from OSchip/llvm-project
[OPENMP][NVPTX]Use __kmpc_data_sharing_coalesced_push_stack function.
Coalesced memory access requires use of the new function `__kmpc_data_sharing_coalesced_push_stack` instead of the `__kmpc_data_sharing_push_stack`. llvm-svn: 345991
This commit is contained in:
parent
391b19c78a
commit
1fc1f8e819
|
@ -84,9 +84,9 @@ enum OpenMPRTLFunctionNVPTX {
|
|||
OMPRTL_NVPTX__kmpc_data_sharing_init_stack,
|
||||
/// Call to void __kmpc_data_sharing_init_stack_spmd();
|
||||
OMPRTL_NVPTX__kmpc_data_sharing_init_stack_spmd,
|
||||
/// Call to void* __kmpc_data_sharing_push_stack(size_t size,
|
||||
/// Call to void* __kmpc_data_sharing_coalesced_push_stack(size_t size,
|
||||
/// int16_t UseSharedMemory);
|
||||
OMPRTL_NVPTX__kmpc_data_sharing_push_stack,
|
||||
OMPRTL_NVPTX__kmpc_data_sharing_coalesced_push_stack,
|
||||
/// Call to void __kmpc_data_sharing_pop_stack(void *a);
|
||||
OMPRTL_NVPTX__kmpc_data_sharing_pop_stack,
|
||||
/// Call to void __kmpc_begin_sharing_variables(void ***args,
|
||||
|
@ -1745,14 +1745,14 @@ CGOpenMPRuntimeNVPTX::createNVPTXRuntimeFunction(unsigned Function) {
|
|||
CGM.CreateRuntimeFunction(FnTy, "__kmpc_data_sharing_init_stack_spmd");
|
||||
break;
|
||||
}
|
||||
case OMPRTL_NVPTX__kmpc_data_sharing_push_stack: {
|
||||
// Build void *__kmpc_data_sharing_push_stack(size_t size,
|
||||
case OMPRTL_NVPTX__kmpc_data_sharing_coalesced_push_stack: {
|
||||
// Build void *__kmpc_data_sharing_coalesced_push_stack(size_t size,
|
||||
// int16_t UseSharedMemory);
|
||||
llvm::Type *TypeParams[] = {CGM.SizeTy, CGM.Int16Ty};
|
||||
auto *FnTy =
|
||||
llvm::FunctionType::get(CGM.VoidPtrTy, TypeParams, /*isVarArg=*/false);
|
||||
RTLFn = CGM.CreateRuntimeFunction(
|
||||
FnTy, /*Name=*/"__kmpc_data_sharing_push_stack");
|
||||
FnTy, /*Name=*/"__kmpc_data_sharing_coalesced_push_stack");
|
||||
break;
|
||||
}
|
||||
case OMPRTL_NVPTX__kmpc_data_sharing_pop_stack: {
|
||||
|
@ -2105,10 +2105,10 @@ void CGOpenMPRuntimeNVPTX::emitGenericVarsProlog(CodeGenFunction &CGF,
|
|||
// the user, for now, default to global.
|
||||
llvm::Value *GlobalRecordSizeArg[] = {
|
||||
Size, CGF.Builder.getInt16(/*UseSharedMemory=*/0)};
|
||||
llvm::Value *GlobalRecValue =
|
||||
CGF.EmitRuntimeCall(createNVPTXRuntimeFunction(
|
||||
OMPRTL_NVPTX__kmpc_data_sharing_push_stack),
|
||||
GlobalRecordSizeArg);
|
||||
llvm::Value *GlobalRecValue = CGF.EmitRuntimeCall(
|
||||
createNVPTXRuntimeFunction(
|
||||
OMPRTL_NVPTX__kmpc_data_sharing_coalesced_push_stack),
|
||||
GlobalRecordSizeArg);
|
||||
GlobalRecCastAddr = Bld.CreatePointerBitCastOrAddrSpaceCast(
|
||||
GlobalRecValue, GlobalRecPtrTy);
|
||||
CGF.EmitBlock(ExitBB);
|
||||
|
@ -2182,10 +2182,10 @@ void CGOpenMPRuntimeNVPTX::emitGenericVarsProlog(CodeGenFunction &CGF,
|
|||
llvm::Value *GlobalRecordSizeArg[] = {
|
||||
llvm::ConstantInt::get(CGM.SizeTy, GlobalRecordSize),
|
||||
CGF.Builder.getInt16(/*UseSharedMemory=*/0)};
|
||||
llvm::Value *GlobalRecValue =
|
||||
CGF.EmitRuntimeCall(createNVPTXRuntimeFunction(
|
||||
OMPRTL_NVPTX__kmpc_data_sharing_push_stack),
|
||||
GlobalRecordSizeArg);
|
||||
llvm::Value *GlobalRecValue = CGF.EmitRuntimeCall(
|
||||
createNVPTXRuntimeFunction(
|
||||
OMPRTL_NVPTX__kmpc_data_sharing_coalesced_push_stack),
|
||||
GlobalRecordSizeArg);
|
||||
GlobalRecCastAddr = Bld.CreatePointerBitCastOrAddrSpaceCast(
|
||||
GlobalRecValue, GlobalRecPtrTy);
|
||||
I->getSecond().GlobalRecordAddr = GlobalRecValue;
|
||||
|
@ -2282,7 +2282,8 @@ void CGOpenMPRuntimeNVPTX::emitGenericVarsProlog(CodeGenFunction &CGF,
|
|||
llvm::Value *GlobalRecordSizeArg[] = {
|
||||
Size, CGF.Builder.getInt16(/*UseSharedMemory=*/0)};
|
||||
llvm::Value *GlobalRecValue = CGF.EmitRuntimeCall(
|
||||
createNVPTXRuntimeFunction(OMPRTL_NVPTX__kmpc_data_sharing_push_stack),
|
||||
createNVPTXRuntimeFunction(
|
||||
OMPRTL_NVPTX__kmpc_data_sharing_coalesced_push_stack),
|
||||
GlobalRecordSizeArg);
|
||||
llvm::Value *GlobalRecCastAddr = Bld.CreatePointerBitCastOrAddrSpaceCast(
|
||||
GlobalRecValue, CGF.ConvertTypeForMem(VD->getType())->getPointerTo());
|
||||
|
|
|
@ -10,7 +10,7 @@ int bar() {
|
|||
}
|
||||
|
||||
// CHECK: define weak void @__omp_offloading_{{.*}}maini1{{.*}}_l[[@LINE+5]](i32* dereferenceable{{.*}})
|
||||
// CHECK-NOT: @__kmpc_data_sharing_push_stack
|
||||
// CHECK-NOT: @__kmpc_data_sharing_coalesced_push_stack
|
||||
|
||||
int maini1() {
|
||||
int a;
|
||||
|
@ -24,7 +24,7 @@ int maini1() {
|
|||
|
||||
// parallel region
|
||||
// CHECK: define {{.*}}void @{{.*}}(i32* noalias {{.*}}, i32* noalias {{.*}}, i32* dereferenceable{{.*}})
|
||||
// CHECK-NOT: call i8* @__kmpc_data_sharing_push_stack(
|
||||
// CHECK-NOT: call i8* @__kmpc_data_sharing_coalesced_push_stack(
|
||||
// CHECK: [[B_ADDR:%.+]] = alloca i32,
|
||||
// CHECK: call {{.*}}[[FOO:@.*foo.*]](i32* dereferenceable{{.*}} [[B_ADDR]])
|
||||
// CHECK: call {{.*}}[[BAR:@.*bar.*]]()
|
||||
|
@ -32,7 +32,7 @@ int maini1() {
|
|||
// CHECK: ret void
|
||||
|
||||
// CHECK: define {{.*}}[[FOO]](i32* dereferenceable{{.*}})
|
||||
// CHECK-NOT: @__kmpc_data_sharing_push_stack
|
||||
// CHECK-NOT: @__kmpc_data_sharing_coalesced_push_stack
|
||||
|
||||
// CHECK: define {{.*}}[[BAR]]()
|
||||
// CHECK: alloca i32,
|
||||
|
@ -41,7 +41,7 @@ int maini1() {
|
|||
// CHECK: [[IS_SPMD:%.+]] = icmp ne i8 [[RES]], 0
|
||||
// CHECK: br i1 [[IS_SPMD]], label
|
||||
// CHECK: br label
|
||||
// CHECK: [[RES:%.+]] = call i8* @__kmpc_data_sharing_push_stack(i64 128, i16 0)
|
||||
// CHECK: [[RES:%.+]] = call i8* @__kmpc_data_sharing_coalesced_push_stack(i64 128, i16 0)
|
||||
// CHECK: [[GLOBALS:%.+]] = bitcast i8* [[RES]] to [[GLOBAL_ST:%.+]]*
|
||||
// CHECK: br label
|
||||
// CHECK: [[ITEMS:%.+]] = phi [[GLOBAL_ST]]* [ null, {{.+}} ], [ [[GLOBALS]], {{.+}} ]
|
||||
|
|
|
@ -566,7 +566,7 @@ int baz(int f, double &a) {
|
|||
// CHECK: br i1 [[IS_SPMD]], label
|
||||
// CHECK: br label
|
||||
// CHECK: [[SIZE:%.+]] = select i1 [[IS_TTD]], i{{64|32}} 4, i{{64|32}} 128
|
||||
// CHECK: [[PTR:%.+]] = call i8* @__kmpc_data_sharing_push_stack(i{{64|32}} [[SIZE]], i16 0)
|
||||
// CHECK: [[PTR:%.+]] = call i8* @__kmpc_data_sharing_coalesced_push_stack(i{{64|32}} [[SIZE]], i16 0)
|
||||
// CHECK: [[REC_ADDR:%.+]] = bitcast i8* [[PTR]] to [[GLOBAL_ST:%.+]]*
|
||||
// CHECK: br label
|
||||
// CHECK: [[ITEMS:%.+]] = phi [[GLOBAL_ST]]* [ null, {{.+}} ], [ [[REC_ADDR]], {{.+}} ]
|
||||
|
|
Loading…
Reference in New Issue