brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · b93ed72 Raw
60 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-unknown-linux -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s2// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple aarch64-unknown-linux -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s3// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple ppc64le-unknown-linux -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s4// expected-no-diagnostics5 6#ifndef HEADER7#define HEADER8 9#define N 100010void func() {11  // Test where a valid when clause contains empty directive.12  // The directive will be ignored and code for a serial for loop will be generated.13#pragma omp metadirective when(implementation = {vendor(llvm)} \14                               :) default(parallel for)15  for (int i = 0; i < N; i++)16    ;17 18#pragma omp metadirective when(implementation = {vendor(llvm)} \19                               :nothing) default(parallel for)20  for (int i = 0; i < N; i++)21    ;22}23 24// CHECK-LABEL: void @_Z4funcv()25// CHECK: entry:26// CHECK:   [[I:%.+]] = alloca i32,27// CHECK:   [[I1:%.+]] = alloca i32,28// CHECK:   store i32 0, ptr [[I]],29// CHECK:   br label %[[FOR_COND:.+]]30// CHECK: [[FOR_COND]]:31// CHECK:   [[ZERO:%.+]] = load i32, ptr [[I]],32// CHECK:   [[CMP:%.+]] = icmp slt i32 [[ZERO]], 100033// CHECK:   br i1 [[CMP]], label %[[FOR_BODY:.+]], label %[[FOR_END:.+]]34// CHECK: [[FOR_BODY]]:35// CHECK:   br label %[[FOR_INC:.+]]36// CHECK: [[FOR_INC]]:37// CHECK:   [[ONE:%.+]] = load i32, ptr [[I]],38// CHECK:   [[INC:%.+]] = add nsw i32 [[ONE]], 139// CHECK:   store i32 [[INC]], ptr [[I]],40// CHECK:   br label %[[FOR_COND]],41// CHECK: [[FOR_END]]:42// CHECK:   store i32 0, ptr [[I1]],43// CHECK:   br label %[[FOR_COND1:.+]]44// CHECK: [[FOR_COND1]]:45// CHECK:   [[TWO:%.+]] = load i32, ptr [[I1]],46// CHECK:   [[CMP1:%.+]] = icmp slt i32 [[TWO]], 100047// CHECK:   br i1 [[CMP1]], label %[[FOR_BODY1:.+]], label %[[FOR_END1:.+]]48// CHECK: [[FOR_BODY1]]:49// CHECK:   br label %[[FOR_INC1:.+]]50// CHECK: [[FOR_INC1]]:51// CHECK:   [[THREE:%.+]] = load i32, ptr [[I1]],52// CHECK:   [[INC1:%.+]] = add nsw i32 [[THREE]], 153// CHECK:   store i32 [[INC1]], ptr [[I1]],54// CHECK:   br label %[[FOR_COND1]],55// CHECK: [[FOR_END1]]:56// CHECK:   ret void57// CHECK: }58 59#endif60