|
| 1 | +// RUN: %clang_cc1 -verify -fompss-2 -ferror-limit 100 %s -S -emit-llvm -o - | FileCheck %s |
| 2 | +// expected-no-diagnostics |
| 3 | + |
| 4 | +void foo(int x) { |
| 5 | + int a, b, c; |
| 6 | + int va[x]; |
| 7 | + #pragma oss task firstprivate(x) |
| 8 | + { |
| 9 | + int d, e, f; |
| 10 | + int va1[x]; |
| 11 | + #pragma oss task |
| 12 | + { |
| 13 | + int g, h, i; |
| 14 | + } |
| 15 | + } |
| 16 | + #pragma oss task |
| 17 | + { |
| 18 | + int j, k, l; |
| 19 | + } |
| 20 | + int m; |
| 21 | +} |
| 22 | + |
| 23 | +// CHECK: %x.addr = alloca i32, align 4 |
| 24 | +// CHECK-NEXT: %a = alloca i32, align 4 |
| 25 | +// CHECK-NEXT: %b = alloca i32, align 4 |
| 26 | +// CHECK-NEXT: %c = alloca i32, align 4 |
| 27 | +// CHECK-NEXT: %saved_stack = alloca i8*, align 8 |
| 28 | +// CHECK-NEXT: %__vla_expr0 = alloca i64, align 8 |
| 29 | +// CHECK-NEXT: %m = alloca i32, align 4 |
| 30 | +// CHECK-NEXT: store i32 %x, i32* %x.addr, align 4 |
| 31 | +// CHECK-NEXT: %0 = load i32, i32* %x.addr, align 4 |
| 32 | +// CHECK-NEXT: %1 = zext i32 %0 to i64 |
| 33 | +// CHECK-NEXT: %2 = call i8* @llvm.stacksave() |
| 34 | +// CHECK-NEXT: store i8* %2, i8** %saved_stack, align 8 |
| 35 | +// CHECK-NEXT: %vla = alloca i32, i64 %1, align 16 |
| 36 | +// CHECK-NEXT: store i64 %1, i64* %__vla_expr0, align 8 |
| 37 | + |
| 38 | +// CHECK: %3 = call token @llvm.directive.region.entry() [ "DIR.OSS"([5 x i8] c"TASK\00"), "QUAL.OSS.FIRSTPRIVATE"(i32* %x.addr) ] |
| 39 | +// CHECK-NEXT: %d = alloca i32, align 4 |
| 40 | +// CHECK-NEXT: %e = alloca i32, align 4 |
| 41 | +// CHECK-NEXT: %f = alloca i32, align 4 |
| 42 | +// CHECK-NEXT: %saved_stack1 = alloca i8*, align 8 |
| 43 | +// CHECK-NEXT: %__vla_expr1 = alloca i64, align 8 |
| 44 | +// CHECK-NEXT: %4 = load i32, i32* %x.addr, align 4 |
| 45 | +// CHECK-NEXT: %5 = zext i32 %4 to i64 |
| 46 | +// CHECK-NEXT: %6 = call i8* @llvm.stacksave() |
| 47 | +// CHECK-NEXT: store i8* %6, i8** %saved_stack1, align 8 |
| 48 | +// CHECK-NEXT: %vla2 = alloca i32, i64 %5, align 16 |
| 49 | +// CHECK-NEXT: store i64 %5, i64* %__vla_expr1, align 8 |
| 50 | + |
| 51 | +// CHECK: %7 = call token @llvm.directive.region.entry() [ "DIR.OSS"([5 x i8] c"TASK\00") ] |
| 52 | +// CHECK-NEXT: %g = alloca i32, align 4 |
| 53 | +// CHECK-NEXT: %h = alloca i32, align 4 |
| 54 | +// CHECK-NEXT: %i = alloca i32, align 4 |
| 55 | +// CHECK-NEXT: call void @llvm.directive.region.exit(token %7) |
| 56 | + |
| 57 | +// CHECK: %8 = load i8*, i8** %saved_stack1, align 8 |
| 58 | +// CHECK-NEXT: call void @llvm.stackrestore(i8* %8) |
| 59 | + |
| 60 | +// CHECK: call void @llvm.directive.region.exit(token %3) |
| 61 | + |
| 62 | +// CHECK: %9 = call token @llvm.directive.region.entry() [ "DIR.OSS"([5 x i8] c"TASK\00") ] |
| 63 | +// CHECK-NEXT: %j = alloca i32, align 4 |
| 64 | +// CHECK-NEXT: %k = alloca i32, align 4 |
| 65 | +// CHECK-NEXT: %l = alloca i32, align 4 |
| 66 | +// CHECK-NEXT: call void @llvm.directive.region.exit(token %9) |
| 67 | + |
| 68 | +// CHECK: %10 = load i8*, i8** %saved_stack, align 8 |
| 69 | +// CHECK-NEXT: call void @llvm.stackrestore(i8* %10) |
| 70 | + |
0 commit comments