LLVM OpenMP
reverse-zero-trip.c
Go to the documentation of this file.
1// RUN: %libomp-compile -fopenmp-version=60 && %libomp-run \
2// RUN: | FileCheck %s --match-full-lines
3
4// A reverse consumed by fuse keeps its pre-inits: its loop init runs even for
5// a zero-trip loop, and runtime bounds are captured.
6
7#ifndef HEADER
8#define HEADER
9
10#include <stdio.h>
11#include <stdlib.h>
12
14 int i = 77, j = 88;
15#pragma omp fuse
16 {
17 for (i = 0; i < 5; i++)
18 ;
19#pragma omp reverse
20 for (j = 0; j < n; j++)
21 ;
22 }
23 printf("in_range_zero: i=%d j=%d\n", i, j);
24}
25
27 int i = 77, j = 88, k = 99;
28#pragma omp fuse looprange(1, 2)
29 {
30 for (i = 0; i < 5; i++)
31 ;
32 for (j = 0; j < 6; j++)
33 ;
34#pragma omp reverse
35 for (k = 0; k < n; k++)
36 ;
37 }
38 printf("out_of_range_zero: i=%d j=%d k=%d\n", i, j, k);
39}
40
42 int step) {
43 int i = -1, j = -1, k = -1;
44#pragma omp fuse looprange(1, 2)
45 {
46 for (i = 0; i < 4; i++)
47 ;
48 for (j = 0; j < 6; j++)
49 ;
50#pragma omp reverse
51 for (k = start; k < end; k += step)
52 ;
53 }
54 printf("out_of_range_step: i=%d j=%d k=%d\n", i, j, k);
55}
56
58 int i = -1, j = -1;
59#pragma omp fuse
60 {
61 for (i = 0; i < 10; i++)
62 ;
63#pragma omp reverse
64 for (j = 0; j < n + 1; j++)
65 ;
66 }
67 printf("captured_bound n=%d: i=%d j=%d\n", n, i, j);
68}
69
78#endif
79
80// CHECK: in_range_zero: i=5 j=0
81// CHECK-NEXT: out_of_range_zero: i=5 j=6 k=0
82// CHECK-NEXT: out_of_range_step: i=4 j=6 k=11
83// CHECK-NEXT: captured_bound n=7: i=10 j=8
84// CHECK-NEXT: captured_bound n=-1: i=10 j=0
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp end
#define i
Definition kmp_stub.cpp:88
static void test_in_range_reverse_zero_trip(int n)
static void test_in_range_reverse_captured_bound(int n)
int main(void)
static void test_out_of_range_reverse_zero_trip(int n)
static void test_out_of_range_reverse_captured_step(int start, int end, int step)