// CHECK-LABEL: @main int main() { // CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num( // CHECK: [[ORIG_TASK_PTR:%.+]] = call i8* @__kmpc_omp_task_alloc({{[^,]+}}, i32 [[GTID]], i32 1, i64 32, i64 1, i32 (i32, i8*)* bitcast (i32 (i32, %{{[^*]+}}*)* [[CAP_FN4:[^ ]+]] to i32 (i32, i8*)*)) // CHECK: call i32 @__kmpc_omp_task(%{{.+}}* @{{.+}}, i32 [[GTID]], i8* [[ORIG_TASK_PTR]]) #pragma omp task if (true) fn4(); // CHECK: [[ORIG_TASK_PTR:%.+]] = call i8* @__kmpc_omp_task_alloc( // CHECK: [[TASK_PTR:%.+]] = bitcast i8* [[ORIG_TASK_PTR]] to // CHECK: call void @__kmpc_omp_task_begin_if0(%{{.+}}* @{{.+}}, i{{.+}} [[GTID]], i8* [[ORIG_TASK_PTR]]) // CHECK: call i32 [[CAP_FN5:@.+]](i32 [[GTID]], %{{.+}}* [[TASK_PTR]]) // CHECK: call void @__kmpc_omp_task_complete_if0(%{{.+}}* @{{.+}}, i{{.+}} [[GTID]], i8* [[ORIG_TASK_PTR]]) #pragma omp task if (false) fn5(); // CHECK: [[ORIG_TASK_PTR:%.+]] = call i8* @__kmpc_omp_task_alloc({{[^,]+}}, i32 [[GTID]], i32 1, i64 32, i64 1, i32 (i32, i8*)* bitcast (i32 (i32, %{{[^*]+}}*)* [[CAP_FN6:[^ ]+]] to i32 (i32, i8*)*)) // CHECK: [[TASK_PTR:%.+]] = bitcast i8* [[ORIG_TASK_PTR]] to // CHECK: br i1 %{{.+}}, label %[[OMP_THEN:.+]], label %[[OMP_ELSE:.+]] // CHECK: [[OMP_THEN]] // CHECK: call i32 @__kmpc_omp_task(%{{.+}}* @{{.+}}, i32 [[GTID]], i8* [[ORIG_TASK_PTR]]) // CHECK: br label %[[OMP_END:.+]] // CHECK: [[OMP_ELSE]] // CHECK: call void @__kmpc_omp_task_begin_if0(%{{.+}}* @{{.+}}, i{{.+}} [[GTID]], i8* [[ORIG_TASK_PTR]]) // CHECK: call i32 [[CAP_FN6:@.+]](i32 [[GTID]], %{{.+}}* [[TASK_PTR]]) // CHECK: call void @__kmpc_omp_task_complete_if0(%{{.+}}* @{{.+}}, i{{.+}} [[GTID]], i8* [[ORIG_TASK_PTR]]) // CHECK: br label %[[OMP_END]] // CHECK: [[OMP_END]] #pragma omp task if (Arg) fn6(); // CHECK: = call {{.*}}i{{.+}} @{{.+}}tmain return tmain(Arg); }
// CHECK-LABEL: define {{.*}}i{{[0-9]+}} @main() int main() { // CHECK: [[GTID:%.+]] = call {{.*}}i32 @__kmpc_global_thread_num( // CHECK: call {{.*}}void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 0, void {{.+}}* [[CAP_FN4:@.+]] to void #pragma omp parallel if (true) fn4(); // CHECK: call {{.*}}void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) // CHECK: store i32 [[GTID]], i32* [[GTID_ADDR:%.+]], // CHECK: call void [[CAP_FN5:@.+]](i32* [[GTID_ADDR]], // CHECK: call {{.*}}void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) #pragma omp parallel if (false) fn5(); // CHECK: br i1 %{{.+}}, label %[[OMP_THEN:.+]], label %[[OMP_ELSE:.+]] // CHECK: [[OMP_THEN]] // CHECK: call {{.*}}void {{.+}} @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{.+}} 0, void {{.+}}* [[CAP_FN6:@.+]] to void // CHECK: br label %[[OMP_END:.+]] // CHECK: [[OMP_ELSE]] // CHECK: call {{.*}}void @__kmpc_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) // CHECK: store i32 [[GTID]], i32* [[GTID_ADDR:%.+]], // CHECK: call void [[CAP_FN6]](i32* [[GTID_ADDR]], // CHECK: call {{.*}}void @__kmpc_end_serialized_parallel(%{{.+}}* @{{.+}}, i32 [[GTID]]) // CHECK: br label %[[OMP_END]] // CHECK: [[OMP_END]] #pragma omp parallel if (Arg) fn6(); // CHECK: = call {{.*}}i{{.+}} @{{.+}}tmain return tmain(Arg); }
void fn7 (void) { /* This is the old LinuxThreads pthread_cleanup_{push,pop}. */ struct _pthread_cleanup_buffer b; _pthread_cleanup_push (&b, clh, (void *) 8l); fn6 (); _pthread_cleanup_pop (&b, 1); }
int main (void) { fn1 (128); fn2 (128); fn3 (128); fn4 (128); fn5 (128, 127); fn5 (128, 128); fn6 (128); return 0; }
void foo () { int i; for (i = 1; i <= 50; i++) { fn6 (i + 0x1234, i + 1, i + 0xa, i + 0x1234, q, b); fn5 (i + 0xabcd, i << 1, i + 0x1234, i << 2); fn7 (i + 0xdead); fn8 (i + 0xdead); fn1 (i, i + 1, i + 2, i + 3, i + 4, i + 5, i << 10); fn4 (i + 0xfeed, i); } }
int tmain(T Arg) { #pragma omp task if (task: true) fn1(); #pragma omp task if (false) fn2(); #pragma omp task if (Arg) fn3(); #pragma omp task if (task: Arg) depend(in : Arg) fn4(); #pragma omp task if (Arg) depend(out : Arg) fn5(); #pragma omp task if (Arg) depend(inout : Arg) fn6(); return 0; }
int main () { int ovf; if (fn1 (-10, __INT_MAX__) != (int) (-10U - __INT_MAX__) || fn2 (0, 0) != 0 || fn2 (32, 16383) != (short int) 524256ULL) __builtin_abort (); #if __SIZEOF_INT__ > __SIZEOF_SHORT__ && __SIZEOF_INT__ > 1 if (fn3 (__SCHAR_MAX__, (unsigned short) ~0, &ovf) != (int) (__SCHAR_MAX__ + (unsigned short) ~0) || ovf || fn3 (-__SCHAR_MAX__ - 1, 0, &ovf) != (int) (-__SCHAR_MAX__ - 1) || ovf) __builtin_abort (); #endif if (fn4 (65535, 0, &ovf) != 65535L * -32768 || ovf) __builtin_abort (); #if __SIZEOF_INT__ > 1 if (fn5 (0, 0, &ovf) != (signed char) (__SCHAR_MAX__ / 4 * 5) || !ovf || fn5 (63, 3, &ovf) != (signed char) ((__SCHAR_MAX__ / 4 + 63) * 8) || !ovf) __builtin_abort (); #endif if (fn6 (0, 0, &ovf) != (unsigned char) ~0 - 66 || ovf || fn6 (63, 3, &ovf) != (unsigned char) ~0 || ovf) __builtin_abort (); if (fn7 (0, 0, &ovf) != 0 || !ovf || fn7 (63, 3, &ovf) != 18 || !ovf) __builtin_abort (); return 0; }
static struct T fn8 (struct T x, int y) { struct S *u = fn10 (); int v = fn5 (&u->s1, &u->s2, 0); while (1) { if (p) fn6 (); if (fn3 (x)) return fn4 (); if (y & 1) return r; v = fn5 (&u->s1, &u->s2, 1); } }
int main () { float a[10]; float aa[10][10]; fn1 (a); CHECK (i == 0); fn2 (a); CHECK (i == 2); fn3 (a); CHECK (i == 3); fn4 (a); CHECK (i == 4); fn5 (aa); CHECK (i == 5); CHECK (j == 10); fn6 (aa); CHECK (i == 7); CHECK (j == 9); }
__attribute__((regparm (3), noinline)) unsigned int test (void *u, S6 *v, S1 **w, S7 *x, S2 *y, S1 *z) { unsigned b = v->s17->s16; unsigned a; S4 *c; unsigned d, e, f, i; fn1 (__func__, u, x->s18); c = (S4 *) (z->s3 + b); a = fn6 ((S3 *) (*w)->s3, b, y, c); c -= a; f = 0; e = 2; for (i = a - 1; ; i--) { if (f + (unsigned short) (c[i].s14 / 2) > b / 2) break; f += c[i].s14; e++; } d = a - e; return c[d].s4; }
case 0: case 1: case 2: case 3: case 4: continue; default: return i; } while (1) { } } return 0; } static_assert (fn5 () == 5, ""); constexpr int fn6 () noexcept { int r = 0; for (int i = 0; i < 10; ++i) { continue; for (int j = 0; j < 10; ++j ) r++; } return r; } static_assert (fn6 () == 0, "");