Changeset View
Changeset View
Standalone View
Standalone View
clang/test/OpenMP/distribute_simd_reduction_codegen.cpp
Show All 40 Lines | |||||
int main() { | int main() { | ||||
static int sivar; | static int sivar; | ||||
#ifdef LAMBDA | #ifdef LAMBDA | ||||
// LAMBDA-LABEL: @main | // LAMBDA-LABEL: @main | ||||
// LAMBDA: call void [[OUTER_LAMBDA:@.+]]( | // LAMBDA: call void [[OUTER_LAMBDA:@.+]]( | ||||
[&]() { | [&]() { | ||||
// LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]]( | // LAMBDA: define{{.*}} internal{{.*}} void [[OUTER_LAMBDA]]( | ||||
// LAMBDA: call i32 @__tgt_target_teams(i64 -1, i8* @{{[^,]+}}, i32 1, i8** %{{[^,]+}}, i8** %{{[^,]+}}, i{{64|32}}* {{.+}}@{{[^,]+}}, i32 0, i32 0), i64* {{.+}}@{{[^,]+}}, i32 0, i32 0), i32 0, i32 1) | // LAMBDA: call i32 @__tgt_target_teams_mapper(i64 -1, i8* @{{[^,]+}}, i32 1, i8** %{{[^,]+}}, i8** %{{[^,]+}}, i{{64|32}}* {{.+}}@{{[^,]+}}, i32 0, i32 0), i64* {{.+}}@{{[^,]+}}, i32 0, i32 0), i8** null, i32 0, i32 1) | ||||
// LAMBDA: call void @[[LOFFL1:.+]]( | // LAMBDA: call void @[[LOFFL1:.+]]( | ||||
// LAMBDA: ret | // LAMBDA: ret | ||||
#pragma omp target | #pragma omp target | ||||
#pragma omp teams | #pragma omp teams | ||||
#pragma omp distribute simd reduction(+: sivar) | #pragma omp distribute simd reduction(+: sivar) | ||||
for (int i = 0; i < 2; ++i) { | for (int i = 0; i < 2; ++i) { | ||||
// LAMBDA: define{{.*}} internal{{.*}} void @[[LOFFL1]](i{{64|32}} [[SIVAR_ARG:%.+]]) | // LAMBDA: define{{.*}} internal{{.*}} void @[[LOFFL1]](i{{64|32}} [[SIVAR_ARG:%.+]]) | ||||
// LAMBDA: [[SIVAR_ADDR:%.+]] = alloca i{{.+}}, | // LAMBDA: [[SIVAR_ADDR:%.+]] = alloca i{{.+}}, | ||||
▲ Show 20 Lines • Show All 60 Lines • ▼ Show 20 Lines | #pragma omp distribute simd reduction(+: sivar) | ||||
for (int i = 0; i < 2; ++i) { | for (int i = 0; i < 2; ++i) { | ||||
sivar += i; | sivar += i; | ||||
} | } | ||||
return tmain<int>(); | return tmain<int>(); | ||||
#endif | #endif | ||||
} | } | ||||
// CHECK: define {{.*}}i{{[0-9]+}} @main() | // CHECK: define {{.*}}i{{[0-9]+}} @main() | ||||
// CHECK: call i32 @__tgt_target_teams(i64 -1, i8* @{{[^,]+}}, i32 1, i8** %{{[^,]+}}, i8** %{{[^,]+}}, i{{64|32}}* {{.+}}@{{[^,]+}}, i32 0, i32 0), i64* {{.+}}@{{[^,]+}}, i32 0, i32 0), i32 0, i32 1) | // CHECK: call i32 @__tgt_target_teams_mapper(i64 -1, i8* @{{[^,]+}}, i32 1, i8** %{{[^,]+}}, i8** %{{[^,]+}}, i{{64|32}}* {{.+}}@{{[^,]+}}, i32 0, i32 0), i64* {{.+}}@{{[^,]+}}, i32 0, i32 0), i8** null, i32 0, i32 1) | ||||
// CHECK: call void @[[OFFL1:.+]](i{{64|32}} %{{.+}}) | // CHECK: call void @[[OFFL1:.+]](i{{64|32}} %{{.+}}) | ||||
// CHECK: {{%.+}} = call{{.*}} i32 @[[TMAIN_INT:.+]]() | // CHECK: {{%.+}} = call{{.*}} i32 @[[TMAIN_INT:.+]]() | ||||
// CHECK: ret | // CHECK: ret | ||||
// CHECK: define{{.*}} void @[[OFFL1]](i{{64|32}} [[SIVAR_ARG:%.+]]) | // CHECK: define{{.*}} void @[[OFFL1]](i{{64|32}} [[SIVAR_ARG:%.+]]) | ||||
// CHECK: [[SIVAR_ADDR:%.+]] = alloca i{{.+}}, | // CHECK: [[SIVAR_ADDR:%.+]] = alloca i{{.+}}, | ||||
// CHECK: store{{.+}} [[SIVAR_ARG]], {{.+}} [[SIVAR_ADDR]], | // CHECK: store{{.+}} [[SIVAR_ARG]], {{.+}} [[SIVAR_ADDR]], | ||||
// CHECK-64: [[SIVAR_CONV:%.+]] = bitcast{{.+}} [[SIVAR_ADDR]] to | // CHECK-64: [[SIVAR_CONV:%.+]] = bitcast{{.+}} [[SIVAR_ADDR]] to | ||||
Show All 29 Lines | |||||
// CHECK: [[DONE]] | // CHECK: [[DONE]] | ||||
// CHECK: [[SIVAR_ORIG_VAL:%.+]] = load i32, i32* [[SIVAR_REF]], | // CHECK: [[SIVAR_ORIG_VAL:%.+]] = load i32, i32* [[SIVAR_REF]], | ||||
// CHECK: [[SIVAR_PRIV_VAL:%.+]] = load i32, i32* [[SIVAR_PRIV]], | // CHECK: [[SIVAR_PRIV_VAL:%.+]] = load i32, i32* [[SIVAR_PRIV]], | ||||
// CHECK: [[ADD:%.+]] = add nsw i32 [[SIVAR_ORIG_VAL]], [[SIVAR_PRIV_VAL]] | // CHECK: [[ADD:%.+]] = add nsw i32 [[SIVAR_ORIG_VAL]], [[SIVAR_PRIV_VAL]] | ||||
// CHECK: store i32 [[ADD]], i32* [[SIVAR_REF]], | // CHECK: store i32 [[ADD]], i32* [[SIVAR_REF]], | ||||
// CHECK: ret void | // CHECK: ret void | ||||
// CHECK: define{{.*}} i{{[0-9]+}} @[[TMAIN_INT]]() | // CHECK: define{{.*}} i{{[0-9]+}} @[[TMAIN_INT]]() | ||||
// CHECK: call i32 @__tgt_target_teams(i64 -1, i8* @{{[^,]+}}, i32 1, | // CHECK: call i32 @__tgt_target_teams_mapper(i64 -1, i8* @{{[^,]+}}, i32 1, | ||||
// CHECK: call void @[[TOFFL1:.+]]({{.+}}) | // CHECK: call void @[[TOFFL1:.+]]({{.+}}) | ||||
// CHECK: ret | // CHECK: ret | ||||
// CHECK: define{{.*}} void @[[TOFFL1]](i{{64|32}} [[TVAR_ARG:%.+]]) | // CHECK: define{{.*}} void @[[TOFFL1]](i{{64|32}} [[TVAR_ARG:%.+]]) | ||||
// CHECK: [[TVAR_ADDR:%.+]] = alloca i{{.+}}, | // CHECK: [[TVAR_ADDR:%.+]] = alloca i{{.+}}, | ||||
// CHECK: store{{.+}} [[TVAR_ARG]], {{.+}} [[TVAR_ADDR]], | // CHECK: store{{.+}} [[TVAR_ARG]], {{.+}} [[TVAR_ADDR]], | ||||
// CHECK-64: [[TVAR_CONV:%.+]] = bitcast{{.+}} [[TVAR_ADDR]] to | // CHECK-64: [[TVAR_CONV:%.+]] = bitcast{{.+}} [[TVAR_ADDR]] to | ||||
// CHECK-64: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[TOUTL1:.+]] to {{.+}}, {{.+}} [[TVAR_CONV]]) | // CHECK-64: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[TOUTL1:.+]] to {{.+}}, {{.+}} [[TVAR_CONV]]) | ||||
Show All 37 Lines |