; RUN: opt %loadPolly %defaultOpts -polly-codegen -enable-polly-openmp -verify-dom-info -S < %s | FileCheck %s

;#include <string.h>
;#define N 10
;
;double A[N];
;double B[N];
;
;void loop_openmp() {
;  for (int i = 0; i < N; i++) {
;    for (int j = 0; j < N; j++) {
;      A[j] += j;
;    }
;  }
;}
;
;int main () {
;  memset(A, 0, sizeof(float) * N);
;
;  loop_openmp();
;
;  return 0;
;}
;

target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
target triple = "i386-pc-linux-gnu"

@A = common global [10 x double] zeroinitializer, align 4
@B = common global [10 x double] zeroinitializer, align 4

define void @loop_openmp() nounwind {
entry:
  br label %for.cond

for.cond:                                         ; preds = %for.inc10, %entry
  %i.0 = phi i32 [ 0, %entry ], [ %inc12, %for.inc10 ]
  %exitcond1 = icmp ne i32 %i.0, 10
  br i1 %exitcond1, label %for.body, label %for.end13

for.body:                                         ; preds = %for.cond
  br label %for.cond2

for.cond2:                                        ; preds = %for.inc, %for.body
  %tmp = phi i32 [ 0, %for.body ], [ %inc, %for.inc ]
  %arrayidx = getelementptr [10 x double]* @A, i32 0, i32 %tmp
  %exitcond = icmp ne i32 %tmp, 10
  br i1 %exitcond, label %for.body5, label %for.end

for.body5:                                        ; preds = %for.cond2
  %conv = sitofp i32 %tmp to double
  %tmp8 = load double* %arrayidx, align 4
  %add = fadd double %tmp8, %conv
  store double %add, double* %arrayidx, align 4
  br label %for.inc

for.inc:                                          ; preds = %for.body5
  %inc = add nsw i32 %tmp, 1
  br label %for.cond2

for.end:                                          ; preds = %for.cond2
  br label %for.inc10

for.inc10:                                        ; preds = %for.end
  %inc12 = add nsw i32 %i.0, 1
  br label %for.cond

for.end13:                                        ; preds = %for.cond
  ret void
}

define i32 @main() nounwind {
entry:
  call void @llvm.memset.p0i8.i32(i8* bitcast ([10 x double]* @A to i8*), i8 0, i32 40, i32 4, i1 false)
  call void @loop_openmp()
  ret i32 0
}

declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind

; CHECK: %omp.userContext = alloca { i32 }
; CHECK: getelementptr inbounds { i32 }* %omp.userContext, i32 0, i32 0
; CHECK: store i32 %polly.indvar, i32* %0
; CHECK: %omp_data = bitcast { i32 }* %omp.userContext to i8*
; CHECK: call void @GOMP_parallel_loop_runtime_start(void (i8*)* @loop_openmp.omp_subfn, i8* %omp_data, i32 0, i32 0, i32 10, i32 1)
; CHECK: call void @loop_openmp.omp_subfn(i8* %omp_data)
; CHECK: call void @GOMP_parallel_end()

; Verify the new subfunction is annotated such that SCoP detection will skip it.
; CHECK: @loop_openmp.omp_subfn({{.*}}) [[ATTR:#[0-9]+]]
; CHECK: attributes [[ATTR]] = {{{[^\}]*}}polly.skip.fn{{[^\}]*}}}

