brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · b4bb036 Raw
110 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --prefix-filecheck-ir-name _2// RUN: %clang_cc1 -triple x86_64-unknown-unknown -fopenmp -fopenmp-version=52 -x c -emit-llvm %s -o - | FileCheck %s3// expected-no-diagnostics4 5void foo();6 7void masked() {8    #pragma omp parallel masked9    {10        foo();11    }12}13 14void maskedFilter() {15    const int tid = 1;16    #pragma omp parallel masked filter(tid)17    {18        foo();19    }20}21 22void master() {23    #pragma omp parallel master24    {25        foo();26    }27}28// CHECK-LABEL: define {{[^@]+}}@masked29// CHECK-SAME: () #[[ATTR0:[0-9]+]] {30// CHECK-NEXT:  entry:31// CHECK-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB1:[0-9]+]], i32 0, ptr @masked.omp_outlined)32// CHECK-NEXT:    ret void33//34//35// CHECK-LABEL: define {{[^@]+}}@masked.omp_outlined36// CHECK-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR1:[0-9]+]] {37// CHECK-NEXT:  entry:38// CHECK-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 839// CHECK-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 840// CHECK-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 841// CHECK-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 842// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 843// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 444// CHECK-NEXT:    [[TMP2:%.*]] = call i32 @__kmpc_masked(ptr @[[GLOB1]], i32 [[TMP1]], i32 0)45// CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 046// CHECK-NEXT:    br i1 [[TMP3]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]47// CHECK:       omp_if.then:48// CHECK-NEXT:    call void (...) @foo()49// CHECK-NEXT:    call void @__kmpc_end_masked(ptr @[[GLOB1]], i32 [[TMP1]])50// CHECK-NEXT:    br label [[OMP_IF_END]]51// CHECK:       omp_if.end:52// CHECK-NEXT:    ret void53//54//55// CHECK-LABEL: define {{[^@]+}}@maskedFilter56// CHECK-SAME: () #[[ATTR0]] {57// CHECK-NEXT:  entry:58// CHECK-NEXT:    [[TID:%.*]] = alloca i32, align 459// CHECK-NEXT:    store i32 1, ptr [[TID]], align 460// CHECK-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB1]], i32 0, ptr @maskedFilter.omp_outlined)61// CHECK-NEXT:    ret void62//63//64// CHECK-LABEL: define {{[^@]+}}@maskedFilter.omp_outlined65// CHECK-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR1]] {66// CHECK-NEXT:  entry:67// CHECK-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 868// CHECK-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 869// CHECK-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 870// CHECK-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 871// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 872// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 473// CHECK-NEXT:    [[TMP2:%.*]] = call i32 @__kmpc_masked(ptr @[[GLOB1]], i32 [[TMP1]], i32 1)74// CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 075// CHECK-NEXT:    br i1 [[TMP3]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]76// CHECK:       omp_if.then:77// CHECK-NEXT:    call void (...) @foo()78// CHECK-NEXT:    call void @__kmpc_end_masked(ptr @[[GLOB1]], i32 [[TMP1]])79// CHECK-NEXT:    br label [[OMP_IF_END]]80// CHECK:       omp_if.end:81// CHECK-NEXT:    ret void82//83//84// CHECK-LABEL: define {{[^@]+}}@master85// CHECK-SAME: () #[[ATTR0]] {86// CHECK-NEXT:  entry:87// CHECK-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB1]], i32 0, ptr @master.omp_outlined)88// CHECK-NEXT:    ret void89//90//91// CHECK-LABEL: define {{[^@]+}}@master.omp_outlined92// CHECK-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR1]] {93// CHECK-NEXT:  entry:94// CHECK-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 895// CHECK-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 896// CHECK-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 897// CHECK-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 898// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 899// CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4100// CHECK-NEXT:    [[TMP2:%.*]] = call i32 @__kmpc_master(ptr @[[GLOB1]], i32 [[TMP1]])101// CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i32 [[TMP2]], 0102// CHECK-NEXT:    br i1 [[TMP3]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]103// CHECK:       omp_if.then:104// CHECK-NEXT:    call void (...) @foo()105// CHECK-NEXT:    call void @__kmpc_end_master(ptr @[[GLOB1]], i32 [[TMP1]])106// CHECK-NEXT:    br label [[OMP_IF_END]]107// CHECK:       omp_if.end:108// CHECK-NEXT:    ret void109//110