Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
clang/test/OpenMP/masked_codegen.cpp
Show All 40 Lines | |||||
#pragma omp masked | #pragma omp masked | ||||
a = 2; | a = 2; | ||||
// IRBUILDER: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num(ptr [[DEFAULT_LOC:@.+]]) | // IRBUILDER: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num(ptr [[DEFAULT_LOC:@.+]]) | ||||
// ALL: [[RES:%.+]] = call {{.*}}i32 @__kmpc_masked(ptr [[DEFAULT_LOC]], i32 [[GTID]], i32 2) | // ALL: [[RES:%.+]] = call {{.*}}i32 @__kmpc_masked(ptr [[DEFAULT_LOC]], i32 [[GTID]], i32 2) | ||||
// ALL-NEXT: [[IS_MASKED:%.+]] = icmp ne i32 [[RES]], 0 | // ALL-NEXT: [[IS_MASKED:%.+]] = icmp ne i32 [[RES]], 0 | ||||
// ALL-NEXT: br i1 [[IS_MASKED]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]] | // ALL-NEXT: br i1 [[IS_MASKED]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]] | ||||
// ALL: [[THEN]] | // ALL: [[THEN]] | ||||
// IRBUILDER-NEXT: call {{.*}}void [[FOO]]() | // IRBUILDER-NEXT: call {{.*}}void [[FOO]]() | ||||
// NORMAL-NEXT: invoke {{.*}}void [[FOO]]() | // NORMAL-NEXT: call unwindabort {{.*}}void [[FOO]]() | ||||
// ALL: call {{.*}}void @__kmpc_end_masked(ptr [[DEFAULT_LOC]], i32 [[GTID]]) | // ALL: call {{.*}}void @__kmpc_end_masked(ptr [[DEFAULT_LOC]], i32 [[GTID]]) | ||||
// ALL-NEXT: br label {{%?}}[[EXIT]] | // ALL-NEXT: br label {{%?}}[[EXIT]] | ||||
// ALL: [[EXIT]] | // ALL: [[EXIT]] | ||||
#pragma omp masked filter(2) | #pragma omp masked filter(2) | ||||
foo(); | foo(); | ||||
// ALL: store i32 9, ptr [[X:.+]], | // ALL: store i32 9, ptr [[X:.+]], | ||||
// ALL: [[X_VAL:%.+]] = load i32, ptr [[X]] | // ALL: [[X_VAL:%.+]] = load i32, ptr [[X]] | ||||
// IRBUILDER: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num(ptr [[DEFAULT_LOC:@.+]]) | // IRBUILDER: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num(ptr [[DEFAULT_LOC:@.+]]) | ||||
// ALL: [[RES:%.+]] = call {{.*}}i32 @__kmpc_masked(ptr [[DEFAULT_LOC]], i32 [[GTID]], i32 [[X_VAL]]) | // ALL: [[RES:%.+]] = call {{.*}}i32 @__kmpc_masked(ptr [[DEFAULT_LOC]], i32 [[GTID]], i32 [[X_VAL]]) | ||||
// ALL-NEXT: [[IS_MASKED:%.+]] = icmp ne i32 [[RES]], 0 | // ALL-NEXT: [[IS_MASKED:%.+]] = icmp ne i32 [[RES]], 0 | ||||
// ALL-NEXT: br i1 [[IS_MASKED]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]] | // ALL-NEXT: br i1 [[IS_MASKED]], label {{%?}}[[THEN:.+]], label {{%?}}[[EXIT:.+]] | ||||
// ALL: [[THEN]] | // ALL: [[THEN]] | ||||
// IRBUILDER-NEXT: call {{.*}}void [[FOO]]() | // IRBUILDER-NEXT: call {{.*}}void [[FOO]]() | ||||
// NORMAL-NEXT: invoke {{.*}}void [[FOO]]() | // NORMAL-NEXT: call unwindabort {{.*}}void [[FOO]]() | ||||
// ALL: call {{.*}}void @__kmpc_end_masked(ptr [[DEFAULT_LOC]], i32 [[GTID]]) | // ALL: call {{.*}}void @__kmpc_end_masked(ptr [[DEFAULT_LOC]], i32 [[GTID]]) | ||||
// ALL-NEXT: br label {{%?}}[[EXIT]] | // ALL-NEXT: br label {{%?}}[[EXIT]] | ||||
// ALL: [[EXIT]] | // ALL: [[EXIT]] | ||||
int x = 9; | int x = 9; | ||||
#pragma omp masked filter(x) | #pragma omp masked filter(x) | ||||
foo(); | foo(); | ||||
// ALL-NOT: call i32 @__kmpc_masked | // ALL-NOT: call i32 @__kmpc_masked | ||||
// ALL-NOT: call void @__kmpc_end_masked | // ALL-NOT: call void @__kmpc_end_masked | ||||
Show All 39 Lines | |||||
// ALL-LABEL: parallel_masked | // ALL-LABEL: parallel_masked | ||||
// TERM_DEBUG-LABEL: parallel_masked | // TERM_DEBUG-LABEL: parallel_masked | ||||
void parallel_masked() { | void parallel_masked() { | ||||
#pragma omp parallel | #pragma omp parallel | ||||
#pragma omp masked filter(1) | #pragma omp masked filter(1) | ||||
// TERM_DEBUG-NOT: __kmpc_global_thread_num | // TERM_DEBUG-NOT: __kmpc_global_thread_num | ||||
// TERM_DEBUG: call i32 @__kmpc_masked({{.+}}), !dbg [[DBG_LOC_START:![0-9]+]] | // TERM_DEBUG: call i32 @__kmpc_masked({{.+}}), !dbg [[DBG_LOC_START:![0-9]+]] | ||||
// TERM_DEBUG: invoke void {{.*}}foo{{.*}}() | // TERM_DEBUG: call unwindabort void {{.*}}foo{{.*}}() | ||||
// TERM_DEBUG: unwind label %[[TERM_LPAD:.+]], | |||||
// TERM_DEBUG-NOT: __kmpc_global_thread_num | // TERM_DEBUG-NOT: __kmpc_global_thread_num | ||||
// TERM_DEBUG: call void @__kmpc_end_masked({{.+}}), !dbg [[DBG_LOC_END:![0-9]+]] | // TERM_DEBUG: call void @__kmpc_end_masked({{.+}}), !dbg [[DBG_LOC_END:![0-9]+]] | ||||
// TERM_DEBUG: [[TERM_LPAD]] | |||||
// TERM_DEBUG: call void @__clang_call_terminate | |||||
// TERM_DEBUG: unreachable | |||||
foo(); | foo(); | ||||
int x; | int x; | ||||
#pragma omp parallel | #pragma omp parallel | ||||
#pragma omp masked filter(x) | #pragma omp masked filter(x) | ||||
// TERM_DEBUG-NOT: __kmpc_global_thread_num | // TERM_DEBUG-NOT: __kmpc_global_thread_num | ||||
// TERM_DEBUG: call i32 @__kmpc_masked({{.+}}), !dbg [[DBG_LOC_START:![0-9]+]] | // TERM_DEBUG: call i32 @__kmpc_masked({{.+}}), !dbg [[DBG_LOC_START:![0-9]+]] | ||||
// TERM_DEBUG: invoke void {{.*}}foo{{.*}}() | // TERM_DEBUG: call unwindabort void {{.*}}foo{{.*}}() | ||||
// TERM_DEBUG: unwind label %[[TERM_LPAD:.+]], | |||||
// TERM_DEBUG-NOT: __kmpc_global_thread_num | // TERM_DEBUG-NOT: __kmpc_global_thread_num | ||||
// TERM_DEBUG: call void @__kmpc_end_masked({{.+}}), !dbg [[DBG_LOC_END:![0-9]+]] | // TERM_DEBUG: call void @__kmpc_end_masked({{.+}}), !dbg [[DBG_LOC_END:![0-9]+]] | ||||
// TERM_DEBUG: [[TERM_LPAD]] | |||||
// TERM_DEBUG: call void @__clang_call_terminate | |||||
// TERM_DEBUG: unreachable | |||||
foo(); | foo(); | ||||
} | } | ||||
// TERM_DEBUG-DAG: [[DBG_LOC_START]] = !DILocation(line: [[@LINE-12]], | // TERM_DEBUG-DAG: [[DBG_LOC_START]] = !DILocation(line: [[@LINE-8]], | ||||
// TERM_DEBUG-DAG: [[DBG_LOC_END]] = !DILocation(line: [[@LINE-3]], | // TERM_DEBUG-DAG: [[DBG_LOC_END]] = !DILocation(line: [[@LINE-3]], | ||||
#endif | #endif |