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