blob: 3e44784ebddfc9555b237db8a369aabe03e43238 [file] [log] [blame]
; RUN: opt %loadPolly -basicaa -polly-cloog -analyze -S < %s | FileCheck %s -check-prefix=CLOOG
; RUN: opt %loadPolly -basicaa -polly-codegen -enable-polly-openmp -S < %s | FileCheck %s
;
; Test case that checks that after the parallel loop on j the value for i is
; taken from the right temporary (in particular, _not_ the temporary used for i
; in the OpenMP subfunction for the loop on j).
;
; void f(long * restrict A) {
; long i, j;
; for (i=0; i<100; ++i) {
; #pragma omp parallel
; for (j=0; j<100; ++j)
; A[j] += i;
; A[i] = 42;
; }
; }
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @f(i64* noalias nocapture %A) {
entry:
br label %for.i
for.i:
%i = phi i64 [ %i.next, %for.end ], [ 0, %entry ]
br label %for.j
for.j: ; preds = %for.j, %for.i
%j = phi i64 [ 0, %for.i ], [ %j.next, %for.j ]
%i.arrayidx = getelementptr inbounds i64* %A, i64 %j
%load = load i64* %i.arrayidx
%add = add nsw i64 %load, %i
store i64 %add, i64* %i.arrayidx
%j.next = add i64 %j, 1
%j.exitcond = icmp eq i64 %j.next, 100
br i1 %j.exitcond, label %for.end, label %for.j
for.end: ; preds = %for.j
%j.arrayidx = getelementptr inbounds i64* %A, i64 %i
store i64 42, i64* %j.arrayidx
%i.next = add i64 %i, 1
%i.exitcond = icmp eq i64 %i.next, 100
br i1 %i.exitcond, label %end, label %for.i
end: ; preds = %for.end, %entry
ret void
}
; CLOOG: for (c2=0;c2<=99;c2++) {
; CLOOG: for (c4=0;c4<=99;c4++) {
; CLOOG: Stmt_for_j(c2,c4);
; CLOOG: }
; CLOOG: Stmt_for_end(c2);
; CLOOG: }
; CHECK: @f.omp_subfn