Changeset View
Changeset View
Standalone View
Standalone View
clang/test/OpenMP/target_teams_distribute_depend_codegen.cpp
Show First 20 Lines • Show All 116 Lines • ▼ Show 20 Lines | int foo(int n) { | ||||
// CHECK-DAG: getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP]], i32 0, i32 0 | // CHECK-DAG: getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP]], i32 0, i32 0 | ||||
// CHECK-DAG: getelementptr inbounds [2 x i8*], [2 x i8*]* [[P]], i32 0, i32 0 | // CHECK-DAG: getelementptr inbounds [2 x i8*], [2 x i8*]* [[P]], i32 0, i32 0 | ||||
// CHECK: [[GEP:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* %{{.+}}, i32 0, i32 2 | // CHECK: [[GEP:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* %{{.+}}, i32 0, i32 2 | ||||
// CHECK: [[DEV:%.+]] = load i32, i32* [[DEVICE_CAP]], | // CHECK: [[DEV:%.+]] = load i32, i32* [[DEVICE_CAP]], | ||||
// CHECK: store i32 [[DEV]], i32* [[GEP]], | // CHECK: store i32 [[DEV]], i32* [[GEP]], | ||||
// CHECK: [[DEV1:%.+]] = load i32, i32* [[DEVICE_CAP]], | // CHECK: [[DEV1:%.+]] = load i32, i32* [[DEVICE_CAP]], | ||||
// CHECK: [[DEV2:%.+]] = sext i32 [[DEV1]] to i64 | // CHECK: [[DEV2:%.+]] = sext i32 [[DEV1]] to i64 | ||||
// CHECK: [[TASK:%.+]] = call i8* @__kmpc_omp_target_task_alloc(%struct.ident_t* [[ID]], i32 [[GTID]], i32 1, i[[SZ]] {{104|60}}, i[[SZ]] {{16|12}}, i32 (i32, i8*)* bitcast (i32 (i32, %{{.+}}*)* [[TASK_ENTRY1_:@.+]] to i32 (i32, i8*)*), i64 [[DEV2]]) | // CHECK: [[TASK:%.+]] = call i8* @__kmpc_omp_target_task_alloc(%struct.ident_t* [[ID]], i32 [[GTID]], i32 1, i[[SZ]] {{120|68}}, i[[SZ]] {{16|12}}, i32 (i32, i8*)* bitcast (i32 (i32, %{{.+}}*)* [[TASK_ENTRY1_:@.+]] to i32 (i32, i8*)*), i64 [[DEV2]]) | ||||
// CHECK: [[BC_TASK:%.+]] = bitcast i8* [[TASK]] to [[TASK_TY1_:%.+]]* | // CHECK: [[BC_TASK:%.+]] = bitcast i8* [[TASK]] to [[TASK_TY1_:%.+]]* | ||||
// CHECK: getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* %{{.+}}, i[[SZ]] 0 | // CHECK: getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* %{{.+}}, i[[SZ]] 0 | ||||
// CHECK: getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* %{{.+}}, i[[SZ]] 1 | // CHECK: getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* %{{.+}}, i[[SZ]] 1 | ||||
// CHECK: getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* %{{.+}}, i[[SZ]] 2 | // CHECK: getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* %{{.+}}, i[[SZ]] 2 | ||||
// CHECK: [[DEP:%.+]] = bitcast %struct.kmp_depend_info* %{{.+}} to i8* | // CHECK: [[DEP:%.+]] = bitcast %struct.kmp_depend_info* %{{.+}} to i8* | ||||
// CHECK: call i32 @__kmpc_omp_task_with_deps(%struct.ident_t* [[ID]], i32 [[GTID]], i8* [[TASK]], i32 3, i8* [[DEP]], i32 0, i8* null) | // CHECK: call i32 @__kmpc_omp_task_with_deps(%struct.ident_t* [[ID]], i32 [[GTID]], i8* [[TASK]], i32 3, i8* [[DEP]], i32 0, i8* null) | ||||
// CHECK: br label %[[EXIT:.+]] | // CHECK: br label %[[EXIT:.+]] | ||||
▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | |||||
// CHECK: define internal void [[HVT0:@.+]]() | // CHECK: define internal void [[HVT0:@.+]]() | ||||
// CHECK: define internal{{.*}} i32 [[TASK_ENTRY0]](i32{{.*}}, [[TASK_TY0]]* noalias %1) | // CHECK: define internal{{.*}} i32 [[TASK_ENTRY0]](i32{{.*}}, [[TASK_TY0]]* noalias %1) | ||||
// CHECK: store void (i8*, ...)* null, void (i8*, ...)** % | // CHECK: store void (i8*, ...)* null, void (i8*, ...)** % | ||||
// CHECK: [[DEVICE_CAP:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* %{{.+}}, i32 0, i32 0 | // CHECK: [[DEVICE_CAP:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* %{{.+}}, i32 0, i32 0 | ||||
// CHECK: [[DEV:%.+]] = load i32, i32* [[DEVICE_CAP]], | // CHECK: [[DEV:%.+]] = load i32, i32* [[DEVICE_CAP]], | ||||
// CHECK: [[DEVICE:%.+]] = sext i32 [[DEV]] to i64 | // CHECK: [[DEVICE:%.+]] = sext i32 [[DEV]] to i64 | ||||
// CHECK: [[RET:%.+]] = call i32 @__tgt_target_teams(i64 [[DEVICE]], i8* @{{[^,]+}}, i32 0, i8** null, i8** null, i64* null, i64* null, i32 0, i32 0) | // CHECK: [[RET:%.+]] = call i32 @__tgt_target_teams_mapper(i64 [[DEVICE]], i8* @{{[^,]+}}, i32 0, i8** null, i8** null, i64* null, i64* null, i8** null, i32 0, i32 0) | ||||
// CHECK-NEXT: [[ERROR:%.+]] = icmp ne i32 [[RET]], 0 | // CHECK-NEXT: [[ERROR:%.+]] = icmp ne i32 [[RET]], 0 | ||||
// CHECK-NEXT: br i1 [[ERROR]], label %[[FAIL:[^,]+]], label %[[END:[^,]+]] | // CHECK-NEXT: br i1 [[ERROR]], label %[[FAIL:[^,]+]], label %[[END:[^,]+]] | ||||
// CHECK: [[FAIL]] | // CHECK: [[FAIL]] | ||||
// CHECK: call void [[HVT0]]() | // CHECK: call void [[HVT0]]() | ||||
// CHECK-NEXT: br label %[[END]] | // CHECK-NEXT: br label %[[END]] | ||||
// CHECK: [[END]] | // CHECK: [[END]] | ||||
// CHECK: ret i32 0 | // CHECK: ret i32 0 | ||||
// CHECK: define internal void [[HVT1:@.+]](i[[SZ]]* %{{.+}}, i[[SZ]] %{{.+}}) | // CHECK: define internal void [[HVT1:@.+]](i[[SZ]]* %{{.+}}, i[[SZ]] %{{.+}}) | ||||
// CHECK: define internal{{.*}} i32 [[TASK_ENTRY1_]](i32{{.*}}, [[TASK_TY1_]]* noalias %1) | // CHECK: define internal{{.*}} i32 [[TASK_ENTRY1_]](i32{{.*}}, [[TASK_TY1_]]* noalias %1) | ||||
// CHECK: call void (i8*, ...) % | // CHECK: call void (i8*, ...) % | ||||
// CHECK: [[SZT:%.+]] = getelementptr inbounds [2 x i64], [2 x i64]* %{{.+}}, i[[SZ]] 0, i[[SZ]] 0 | // CHECK: [[SZT:%.+]] = getelementptr inbounds [2 x i64], [2 x i64]* %{{.+}}, i[[SZ]] 0, i[[SZ]] 0 | ||||
// CHECK: [[DEVICE_CAP:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* %{{.+}}, i32 0, i32 2 | // CHECK: [[DEVICE_CAP:%.+]] = getelementptr inbounds %{{.+}}, %{{.+}}* %{{.+}}, i32 0, i32 2 | ||||
// CHECK: [[DEV:%.+]] = load i32, i32* [[DEVICE_CAP]], | // CHECK: [[DEV:%.+]] = load i32, i32* [[DEVICE_CAP]], | ||||
// CHECK: [[DEVICE:%.+]] = sext i32 [[DEV]] to i64 | // CHECK: [[DEVICE:%.+]] = sext i32 [[DEV]] to i64 | ||||
// CHECK: [[RET:%.+]] = call i32 @__tgt_target_teams_nowait(i64 [[DEVICE]], i8* @{{[^,]+}}, i32 2, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* [[SZT]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[MAPT]], i32 0, i32 0), i32 0, i32 0) | // CHECK: [[RET:%.+]] = call i32 @__tgt_target_teams_nowait_mapper(i64 [[DEVICE]], i8* @{{[^,]+}}, i32 2, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i64* [[SZT]], i64* getelementptr inbounds ([2 x i64], [2 x i64]* [[MAPT]], i32 0, i32 0), i8** [[M:%[^,]+]], i32 0, i32 0) | ||||
// CHECK: [[ERROR:%.+]] = icmp ne i32 [[RET]], 0 | // CHECK: [[ERROR:%.+]] = icmp ne i32 [[RET]], 0 | ||||
// CHECK-NEXT: br i1 [[ERROR]], label %[[FAIL:[^,]+]], label %[[END:[^,]+]] | // CHECK-NEXT: br i1 [[ERROR]], label %[[FAIL:[^,]+]], label %[[END:[^,]+]] | ||||
// CHECK: [[FAIL]] | // CHECK: [[FAIL]] | ||||
// CHECK: [[BP0:%.+]] = load i[[SZ]]*, i[[SZ]]** % | // CHECK: [[BP0:%.+]] = load i[[SZ]]*, i[[SZ]]** % | ||||
// CHECK: [[BP1_I32:%.+]] = load i32, i32* @ | // CHECK: [[BP1_I32:%.+]] = load i32, i32* @ | ||||
// CHECK-64: [[BP1_CAST:%.+]] = bitcast i[[SZ]]* [[BP1_PTR:%.+]] to i32* | // CHECK-64: [[BP1_CAST:%.+]] = bitcast i[[SZ]]* [[BP1_PTR:%.+]] to i32* | ||||
// CHECK-64: store i32 [[BP1_I32]], i32* [[BP1_CAST]], | // CHECK-64: store i32 [[BP1_I32]], i32* [[BP1_CAST]], | ||||
Show All 39 Lines |