brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.8 KiB · 9343250 Raw
203 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature --include-generated-funcs --replace-value-regex "__omp_offloading_[0-9a-z]+_[0-9a-z]+" "reduction_size[.].+[.]" "pl_cond[.].+[.|,]" --prefix-filecheck-ir-name _2// RUN: %clang_cc1 -verify -fopenmp -x c++ -emit-llvm -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -o - %s | FileCheck %s --check-prefix=CHECK13// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -fexceptions -fcxx-exceptions -triple x86_64-unknown-unknown -emit-pch -o %t %s4// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -include-pch %t -verify %s -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-llvm -o - | FileCheck %s --check-prefix=CHECK15 6// RUN: %clang_cc1 -verify -fopenmp-simd -x c++ -emit-llvm -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -o - %s | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"7// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -fexceptions -fcxx-exceptions -triple x86_64-unknown-unknown -emit-pch -o %t %s8// RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -include-pch %t -verify %s -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-llvm -o - | FileCheck %s --implicit-check-not="{{__kmpc|__tgt}}"9// expected-no-diagnostics10#ifndef HEADER11#define HEADER12void foo() { extern void mayThrow(); mayThrow(); };13void bar() { extern void mayThrow(); mayThrow(); };14 15template <class T>16T tmain() {17#pragma omp parallel sections18  {19    foo();20  }21  return T();22}23 24int main() {25#pragma omp parallel sections26  {27// <<UB = min(UB, GlobalUB);>>28// <<IV = LB;>>29// <<IV <= UB?>>30// <<TRUE>> - > <BODY>31#pragma omp section32    foo();33#pragma omp section34    bar();35// <<++IV;>>36  }37  return tmain<int>();38}39 40 41#endif42// CHECK1-LABEL: define {{[^@]+}}@_Z3foov43// CHECK1-SAME: () #[[ATTR0:[0-9]+]] {44// CHECK1-NEXT:  entry:45// CHECK1-NEXT:    call void @_Z8mayThrowv()46// CHECK1-NEXT:    ret void47//48//49// CHECK1-LABEL: define {{[^@]+}}@_Z3barv50// CHECK1-SAME: () #[[ATTR0]] {51// CHECK1-NEXT:  entry:52// CHECK1-NEXT:    call void @_Z8mayThrowv()53// CHECK1-NEXT:    ret void54//55//56// CHECK1-LABEL: define {{[^@]+}}@main57// CHECK1-SAME: () #[[ATTR2:[0-9]+]] {58// CHECK1-NEXT:  entry:59// CHECK1-NEXT:    [[RETVAL:%.*]] = alloca i32, align 460// CHECK1-NEXT:    store i32 0, ptr [[RETVAL]], align 461// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2:[0-9]+]], i32 0, ptr @main.omp_outlined)62// CHECK1-NEXT:    [[CALL:%.*]] = call noundef i32 @_Z5tmainIiET_v()63// CHECK1-NEXT:    ret i32 [[CALL]]64//65//66// CHECK1-LABEL: define {{[^@]+}}@main.omp_outlined67// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR3:[0-9]+]] personality ptr @__gxx_personality_v0 {68// CHECK1-NEXT:  entry:69// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 870// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 871// CHECK1-NEXT:    [[DOTOMP_SECTIONS_LB_:%.*]] = alloca i32, align 472// CHECK1-NEXT:    [[DOTOMP_SECTIONS_UB_:%.*]] = alloca i32, align 473// CHECK1-NEXT:    [[DOTOMP_SECTIONS_ST_:%.*]] = alloca i32, align 474// CHECK1-NEXT:    [[DOTOMP_SECTIONS_IL_:%.*]] = alloca i32, align 475// CHECK1-NEXT:    [[DOTOMP_SECTIONS_IV_:%.*]] = alloca i32, align 476// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 877// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 878// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_SECTIONS_LB_]], align 479// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_SECTIONS_UB_]], align 480// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_SECTIONS_ST_]], align 481// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_SECTIONS_IL_]], align 482// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 883// CHECK1-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 484// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1:[0-9]+]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_SECTIONS_IL_]], ptr [[DOTOMP_SECTIONS_LB_]], ptr [[DOTOMP_SECTIONS_UB_]], ptr [[DOTOMP_SECTIONS_ST_]], i32 1, i32 1)85// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_UB_]], align 486// CHECK1-NEXT:    [[TMP3:%.*]] = icmp slt i32 [[TMP2]], 187// CHECK1-NEXT:    [[TMP4:%.*]] = select i1 [[TMP3]], i32 [[TMP2]], i32 188// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_SECTIONS_UB_]], align 489// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_LB_]], align 490// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_SECTIONS_IV_]], align 491// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]92// CHECK1:       omp.inner.for.cond:93// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_IV_]], align 494// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_UB_]], align 495// CHECK1-NEXT:    [[CMP:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]96// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]97// CHECK1:       omp.inner.for.body:98// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_IV_]], align 499// CHECK1-NEXT:    switch i32 [[TMP8]], label [[DOTOMP_SECTIONS_EXIT:%.*]] [100// CHECK1-NEXT:    i32 0, label [[DOTOMP_SECTIONS_CASE:%.*]]101// CHECK1-NEXT:    i32 1, label [[DOTOMP_SECTIONS_CASE1:%.*]]102// CHECK1-NEXT:    ]103// CHECK1:       .omp.sections.case:104// CHECK1-NEXT:    invoke void @_Z3foov()105// CHECK1-NEXT:    to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]106// CHECK1:       invoke.cont:107// CHECK1-NEXT:    br label [[DOTOMP_SECTIONS_EXIT]]108// CHECK1:       .omp.sections.case1:109// CHECK1-NEXT:    invoke void @_Z3barv()110// CHECK1-NEXT:    to label [[INVOKE_CONT2:%.*]] unwind label [[TERMINATE_LPAD]]111// CHECK1:       invoke.cont2:112// CHECK1-NEXT:    br label [[DOTOMP_SECTIONS_EXIT]]113// CHECK1:       .omp.sections.exit:114// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]115// CHECK1:       omp.inner.for.inc:116// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_IV_]], align 4117// CHECK1-NEXT:    [[INC:%.*]] = add nsw i32 [[TMP9]], 1118// CHECK1-NEXT:    store i32 [[INC]], ptr [[DOTOMP_SECTIONS_IV_]], align 4119// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]120// CHECK1:       omp.inner.for.end:121// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])122// CHECK1-NEXT:    ret void123// CHECK1:       terminate.lpad:124// CHECK1-NEXT:    [[TMP10:%.*]] = landingpad { ptr, i32 }125// CHECK1-NEXT:    catch ptr null126// CHECK1-NEXT:    [[TMP11:%.*]] = extractvalue { ptr, i32 } [[TMP10]], 0127// CHECK1-NEXT:    call void @__clang_call_terminate(ptr [[TMP11]]) #[[ATTR7:[0-9]+]]128// CHECK1-NEXT:    unreachable129//130//131// CHECK1-LABEL: define {{[^@]+}}@__clang_call_terminate132// CHECK1-SAME: (ptr noundef [[TMP0:%.*]]) #[[ATTR5:[0-9]+]] comdat {133// CHECK1-NEXT:    [[TMP2:%.*]] = call ptr @__cxa_begin_catch(ptr [[TMP0]]) #[[ATTR4:[0-9]+]]134// CHECK1-NEXT:    call void @_ZSt9terminatev() #[[ATTR7]]135// CHECK1-NEXT:    unreachable136//137//138// CHECK1-LABEL: define {{[^@]+}}@_Z5tmainIiET_v139// CHECK1-SAME: () #[[ATTR6:[0-9]+]] comdat {140// CHECK1-NEXT:  entry:141// CHECK1-NEXT:    call void (ptr, i32, ptr, ...) @__kmpc_fork_call(ptr @[[GLOB2]], i32 0, ptr @_Z5tmainIiET_v.omp_outlined)142// CHECK1-NEXT:    ret i32 0143//144//145// CHECK1-LABEL: define {{[^@]+}}@_Z5tmainIiET_v.omp_outlined146// CHECK1-SAME: (ptr noalias noundef [[DOTGLOBAL_TID_:%.*]], ptr noalias noundef [[DOTBOUND_TID_:%.*]]) #[[ATTR3]] personality ptr @__gxx_personality_v0 {147// CHECK1-NEXT:  entry:148// CHECK1-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8149// CHECK1-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8150// CHECK1-NEXT:    [[DOTOMP_SECTIONS_LB_:%.*]] = alloca i32, align 4151// CHECK1-NEXT:    [[DOTOMP_SECTIONS_UB_:%.*]] = alloca i32, align 4152// CHECK1-NEXT:    [[DOTOMP_SECTIONS_ST_:%.*]] = alloca i32, align 4153// CHECK1-NEXT:    [[DOTOMP_SECTIONS_IL_:%.*]] = alloca i32, align 4154// CHECK1-NEXT:    [[DOTOMP_SECTIONS_IV_:%.*]] = alloca i32, align 4155// CHECK1-NEXT:    store ptr [[DOTGLOBAL_TID_]], ptr [[DOTGLOBAL_TID__ADDR]], align 8156// CHECK1-NEXT:    store ptr [[DOTBOUND_TID_]], ptr [[DOTBOUND_TID__ADDR]], align 8157// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_SECTIONS_LB_]], align 4158// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_SECTIONS_UB_]], align 4159// CHECK1-NEXT:    store i32 1, ptr [[DOTOMP_SECTIONS_ST_]], align 4160// CHECK1-NEXT:    store i32 0, ptr [[DOTOMP_SECTIONS_IL_]], align 4161// CHECK1-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[DOTGLOBAL_TID__ADDR]], align 8162// CHECK1-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4163// CHECK1-NEXT:    call void @__kmpc_for_static_init_4(ptr @[[GLOB1]], i32 [[TMP1]], i32 34, ptr [[DOTOMP_SECTIONS_IL_]], ptr [[DOTOMP_SECTIONS_LB_]], ptr [[DOTOMP_SECTIONS_UB_]], ptr [[DOTOMP_SECTIONS_ST_]], i32 1, i32 1)164// CHECK1-NEXT:    [[TMP2:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_UB_]], align 4165// CHECK1-NEXT:    [[TMP3:%.*]] = icmp slt i32 [[TMP2]], 0166// CHECK1-NEXT:    [[TMP4:%.*]] = select i1 [[TMP3]], i32 [[TMP2]], i32 0167// CHECK1-NEXT:    store i32 [[TMP4]], ptr [[DOTOMP_SECTIONS_UB_]], align 4168// CHECK1-NEXT:    [[TMP5:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_LB_]], align 4169// CHECK1-NEXT:    store i32 [[TMP5]], ptr [[DOTOMP_SECTIONS_IV_]], align 4170// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND:%.*]]171// CHECK1:       omp.inner.for.cond:172// CHECK1-NEXT:    [[TMP6:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_IV_]], align 4173// CHECK1-NEXT:    [[TMP7:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_UB_]], align 4174// CHECK1-NEXT:    [[CMP:%.*]] = icmp sle i32 [[TMP6]], [[TMP7]]175// CHECK1-NEXT:    br i1 [[CMP]], label [[OMP_INNER_FOR_BODY:%.*]], label [[OMP_INNER_FOR_END:%.*]]176// CHECK1:       omp.inner.for.body:177// CHECK1-NEXT:    [[TMP8:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_IV_]], align 4178// CHECK1-NEXT:    switch i32 [[TMP8]], label [[DOTOMP_SECTIONS_EXIT:%.*]] [179// CHECK1-NEXT:    i32 0, label [[DOTOMP_SECTIONS_CASE:%.*]]180// CHECK1-NEXT:    ]181// CHECK1:       .omp.sections.case:182// CHECK1-NEXT:    invoke void @_Z3foov()183// CHECK1-NEXT:    to label [[INVOKE_CONT:%.*]] unwind label [[TERMINATE_LPAD:%.*]]184// CHECK1:       invoke.cont:185// CHECK1-NEXT:    br label [[DOTOMP_SECTIONS_EXIT]]186// CHECK1:       .omp.sections.exit:187// CHECK1-NEXT:    br label [[OMP_INNER_FOR_INC:%.*]]188// CHECK1:       omp.inner.for.inc:189// CHECK1-NEXT:    [[TMP9:%.*]] = load i32, ptr [[DOTOMP_SECTIONS_IV_]], align 4190// CHECK1-NEXT:    [[INC:%.*]] = add nsw i32 [[TMP9]], 1191// CHECK1-NEXT:    store i32 [[INC]], ptr [[DOTOMP_SECTIONS_IV_]], align 4192// CHECK1-NEXT:    br label [[OMP_INNER_FOR_COND]]193// CHECK1:       omp.inner.for.end:194// CHECK1-NEXT:    call void @__kmpc_for_static_fini(ptr @[[GLOB1]], i32 [[TMP1]])195// CHECK1-NEXT:    ret void196// CHECK1:       terminate.lpad:197// CHECK1-NEXT:    [[TMP10:%.*]] = landingpad { ptr, i32 }198// CHECK1-NEXT:    catch ptr null199// CHECK1-NEXT:    [[TMP11:%.*]] = extractvalue { ptr, i32 } [[TMP10]], 0200// CHECK1-NEXT:    call void @__clang_call_terminate(ptr [[TMP11]]) #[[ATTR7]]201// CHECK1-NEXT:    unreachable202//203