blob: 046b87f236f15ea64625e1e16e4c4971ad395ccb [file] [log] [blame]
; 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