llvm-project/openmp/runtime/test/transform/fuse/parallel-wsloop-collapse-intfor.c
Walter J.T.V cd4c5280c7
[Clang][OpenMP][LoopTransformations] Implement "#pragma omp fuse" loop transformation directive and "looprange" clause (#139293)
This change implements the fuse directive, `#pragma omp fuse`, as specified in the OpenMP 6.0, along with the `looprange` clause in clang.

This change also adds minimal stubs so flang keeps compiling (a full implementation in flang of this directive is still pending).

---------

Co-authored-by: Roger Ferrer Ibanez <roger.ferrer@bsc.es>
2025-09-29 07:48:18 +02:00

46 lines
931 B
C

// RUN: %libomp-cxx-compile-and-run | FileCheck %s --match-full-lines
#ifndef HEADER
#define HEADER
#include <cstdlib>
#include <cstdio>
int main() {
printf("do\n");
#pragma omp parallel for collapse(2) num_threads(1)
for (int i = 0; i < 3; ++i)
#pragma omp fuse
{
for (int j = 0; j < 3; ++j)
printf("i=%d j=%d\n", i, j);
for (int k = 0; k < 3; ++k)
printf("i=%d k=%d\n", i, k);
}
printf("done\n");
return EXIT_SUCCESS;
}
#endif /* HEADER */
// CHECK: do
// CHECK-NEXT: i=0 j=0
// CHECK-NEXT: i=0 k=0
// CHECK-NEXT: i=0 j=1
// CHECK-NEXT: i=0 k=1
// CHECK-NEXT: i=0 j=2
// CHECK-NEXT: i=0 k=2
// CHECK-NEXT: i=1 j=0
// CHECK-NEXT: i=1 k=0
// CHECK-NEXT: i=1 j=1
// CHECK-NEXT: i=1 k=1
// CHECK-NEXT: i=1 j=2
// CHECK-NEXT: i=1 k=2
// CHECK-NEXT: i=2 j=0
// CHECK-NEXT: i=2 k=0
// CHECK-NEXT: i=2 j=1
// CHECK-NEXT: i=2 k=1
// CHECK-NEXT: i=2 j=2
// CHECK-NEXT: i=2 k=2
// CHECK-NEXT: done