; RUN: opt %loadPolly  %defaultOpts -polly-analyze-ir  -print-top-scop-only -analyze %s | FileCheck %s
; XFAIL: *
; ModuleID = './datamining/correlation/correlation_with_param.ll'
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"
target triple = "x86_64-unknown-linux-gnu"

%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] }
%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }

@float_n = global double 0x41B32863F6028F5C
@eps = global double 5.000000e-03
@data = common global [501 x [501 x double]] zeroinitializer, align 32
@symmat = common global [501 x [501 x double]] zeroinitializer, align 32
@stderr = external global %struct._IO_FILE*
@.str = private constant [8 x i8] c"%0.2lf \00", align 1
@mean = common global [501 x double] zeroinitializer, align 32
@stddev = common global [501 x double] zeroinitializer, align 32

define void @scop_func(i64 %m, i64 %n) nounwind {
entry:
  %0 = icmp slt i64 %n, 1
  %1 = icmp slt i64 %m, 1
  %or.cond = or i1 %0, %1
  br i1 %or.cond, label %bb13.preheader, label %bb2.preheader.preheader

bb2.preheader.preheader:                          ; preds = %entry
  br label %bb2.preheader

bb1:                                              ; preds = %bb2.preheader, %bb1
  %indvar52 = phi i64 [ %tmp63, %bb1 ], [ 0, %bb2.preheader ]
  %tmp9 = add i64 %indvar52, 1
  %scevgep59 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp8, i64 %tmp9
  %tmp61 = add i64 %indvar52, 2
  %tmp3 = add i64 %indvar52, 1
  %scevgep60 = getelementptr [501 x double]* @mean, i64 0, i64 %tmp3
  %scevgep55 = getelementptr [501 x double]* @stddev, i64 0, i64 %tmp3
  %tmp63 = add i64 %indvar52, 1
  %2 = load double* %scevgep59, align 8
  %3 = load double* %scevgep60, align 8
  %4 = fsub double %2, %3
  store double %4, double* %scevgep59, align 8
  %5 = load double* @float_n, align 8
  %6 = tail call double @sqrt(double %5) nounwind readonly
  %7 = load double* %scevgep55, align 8
  %8 = fmul double %6, %7
  %9 = fdiv double %4, %8
  store double %9, double* %scevgep59, align 8
  %10 = icmp sgt i64 %tmp61, %m
  br i1 %10, label %bb3, label %bb1

bb3:                                              ; preds = %bb1
  %11 = icmp sgt i64 %tmp65, %n
  br i1 %11, label %bb13.preheader.loopexit, label %bb2.preheader

bb2.preheader:                                    ; preds = %bb2.preheader.preheader, %bb3
  %indvar56 = phi i64 [ %tmp62, %bb3 ], [ 0, %bb2.preheader.preheader ]
  %tmp8 = add i64 %indvar56, 1
  %tmp65 = add i64 %indvar56, 2
  %tmp62 = add i64 %indvar56, 1
  br label %bb1

bb13.preheader.loopexit:                          ; preds = %bb3
  br label %bb13.preheader

bb13.preheader:                                   ; preds = %bb13.preheader.loopexit, %entry
  %12 = add nsw i64 %m, -1
  %13 = icmp slt i64 %12, 1
  br i1 %13, label %return, label %bb6.preheader

bb6.preheader:                                    ; preds = %bb13.preheader
  %tmp = add i64 %m, -1
  br label %bb6

bb6:                                              ; preds = %bb6.preheader, %bb12
  %indvar14 = phi i64 [ 0, %bb6.preheader ], [ %indvar.next15, %bb12 ]
  %tmp35 = add i64 %indvar14, 3
  %tmp36 = trunc i64 %tmp35 to i32
  %tmp38 = add i64 %indvar14, 2
  %tmp39 = trunc i64 %tmp38 to i32
  %tmp46 = add i64 %indvar14, 1
  %scevgep49 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 0, i64 %tmp46
  %scevgep53 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 %tmp46, i64 0
  %tmp59 = mul i64 %indvar14, 502
  %tmp60 = add i64 %tmp59, 1
  %scevgep61 = getelementptr [501 x [501 x double]]* @symmat, i64 0, i64 1, i64 %tmp60
  store double 1.000000e+00, double* %scevgep61, align 8
  %14 = icmp sgt i64 %tmp38, %m
  br i1 %14, label %bb12, label %bb.nph12

bb.nph12:                                         ; preds = %bb6
  br i1 %0, label %bb10.us.preheader, label %bb.nph.preheader

bb10.us.preheader:                                ; preds = %bb.nph12
  br label %bb10.us

bb.nph.preheader:                                 ; preds = %bb.nph12
  br label %bb.nph

bb10.us:                                          ; preds = %bb10.us.preheader, %bb10.us
  %indvar = phi i32 [ %indvar.next, %bb10.us ], [ 0, %bb10.us.preheader ]
  %storemerge2.us = add i32 %tmp36, %indvar
  %storemerge28.us = add i32 %tmp39, %indvar
  %tmp55 = sext i32 %storemerge28.us to i64
  %tmp56 = mul i64 %tmp55, 501
  %scevgep57 = getelementptr double* %scevgep49, i64 %tmp56
  %scevgep58 = getelementptr double* %scevgep53, i64 %tmp55
  store double 0.000000e+00, double* %scevgep58, align 8
  store double 0.000000e+00, double* %scevgep57, align 8
  %15 = sext i32 %storemerge2.us to i64
  %16 = icmp sgt i64 %15, %m
  %indvar.next = add i32 %indvar, 1
  br i1 %16, label %bb12.loopexit1, label %bb10.us

bb.nph:                                           ; preds = %bb.nph.preheader, %bb10
  %indvar41 = phi i32 [ %indvar.next42, %bb10 ], [ 0, %bb.nph.preheader ]
  %storemerge2 = add i32 %tmp36, %indvar41
  %storemerge28 = add i32 %tmp39, %indvar41
  %tmp50 = sext i32 %storemerge28 to i64
  %tmp51 = mul i64 %tmp50, 501
  %scevgep52 = getelementptr double* %scevgep49, i64 %tmp51
  %scevgep54 = getelementptr double* %scevgep53, i64 %tmp50
  %tmp21 = sext i32 %storemerge28 to i64
  store double 0.000000e+00, double* %scevgep54, align 8
  br label %bb8

bb8:                                              ; preds = %bb8, %bb.nph
  %indvar38 = phi i64 [ 0, %bb.nph ], [ %tmp40, %bb8 ]
  %17 = phi double [ 0.000000e+00, %bb.nph ], [ %21, %bb8 ]
  %tmp44 = add i64 %indvar38, 1
  %scevgep47 = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp44, i64 %tmp46
  %tmp48 = add i64 %indvar38, 2
  %tmp13 = add i64 %indvar38, 1
  %scevgep = getelementptr [501 x [501 x double]]* @data, i64 0, i64 %tmp13, i64 %tmp21
  %tmp40 = add i64 %indvar38, 1
  %18 = load double* %scevgep47, align 8
  %19 = load double* %scevgep, align 8
  %20 = fmul double %18, %19
  %21 = fadd double %17, %20
  %22 = icmp sgt i64 %tmp48, %n
  br i1 %22, label %bb10, label %bb8

bb10:                                             ; preds = %bb8
  %.lcssa = phi double [ %21, %bb8 ]
  store double %.lcssa, double* %scevgep54
  store double %.lcssa, double* %scevgep52, align 8
  %23 = sext i32 %storemerge2 to i64
  %24 = icmp sgt i64 %23, %m
  %indvar.next42 = add i32 %indvar41, 1
  br i1 %24, label %bb12.loopexit, label %bb.nph

bb12.loopexit:                                    ; preds = %bb10
  br label %bb12

bb12.loopexit1:                                   ; preds = %bb10.us
  br label %bb12

bb12:                                             ; preds = %bb12.loopexit1, %bb12.loopexit, %bb6
  %indvar.next15 = add i64 %indvar14, 1
  %exitcond = icmp eq i64 %indvar.next15, %tmp
  br i1 %exitcond, label %return.loopexit, label %bb6

return.loopexit:                                  ; preds = %bb12
  br label %return

return:                                           ; preds = %return.loopexit, %bb13.preheader
  ret void
}

declare double @sqrt(double) nounwind readonly
