| ; RUN: opt %loadPolly %defaultOpts -polly-detect -polly-cloog -analyze %s | FileCheck %s |
| 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 } |
| |
| @alpha = common global double 0.000000e+00 |
| @beta = common global double 0.000000e+00 |
| @u1 = common global [4000 x double] zeroinitializer, align 32 |
| @u2 = common global [4000 x double] zeroinitializer, align 32 |
| @v1 = common global [4000 x double] zeroinitializer, align 32 |
| @v2 = common global [4000 x double] zeroinitializer, align 32 |
| @y = common global [4000 x double] zeroinitializer, align 32 |
| @z = common global [4000 x double] zeroinitializer, align 32 |
| @x = common global [4000 x double] zeroinitializer, align 32 |
| @w = common global [4000 x double] zeroinitializer, align 32 |
| @A = common global [4000 x [4000 x double]] zeroinitializer, align 32 |
| @stderr = external global %struct._IO_FILE* |
| @.str = private constant [8 x i8] c"%0.2lf \00", align 1 |
| @B = common global [4000 x [4000 x double]] zeroinitializer, align 32 |
| |
| define void @scop_func(i64 %n) nounwind { |
| entry: |
| %0 = icmp sgt i64 %n, 0 |
| br i1 %0, label %bb.nph40.preheader, label %return |
| |
| bb.nph40.preheader: ; preds = %entry |
| br label %bb.nph40 |
| |
| bb.nph40: ; preds = %bb.nph40.preheader, %bb3 |
| %i.041 = phi i64 [ %11, %bb3 ], [ 0, %bb.nph40.preheader ] |
| %scevgep66 = getelementptr [4000 x double]* @u1, i64 0, i64 %i.041 |
| %scevgep67 = getelementptr [4000 x double]* @u2, i64 0, i64 %i.041 |
| %1 = load double* %scevgep66, align 8 |
| %2 = load double* %scevgep67, align 8 |
| br label %bb1 |
| |
| bb1: ; preds = %bb1, %bb.nph40 |
| %j.039 = phi i64 [ 0, %bb.nph40 ], [ %10, %bb1 ] |
| %scevgep63 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %i.041, i64 %j.039 |
| %scevgep62 = getelementptr [4000 x double]* @v2, i64 0, i64 %j.039 |
| %scevgep61 = getelementptr [4000 x double]* @v1, i64 0, i64 %j.039 |
| %3 = load double* %scevgep63, align 8 |
| %4 = load double* %scevgep61, align 8 |
| %5 = fmul double %1, %4 |
| %6 = fadd double %3, %5 |
| %7 = load double* %scevgep62, align 8 |
| %8 = fmul double %2, %7 |
| %9 = fadd double %6, %8 |
| store double %9, double* %scevgep63, align 8 |
| %10 = add nsw i64 %j.039, 1 |
| %exitcond16 = icmp eq i64 %10, %n |
| br i1 %exitcond16, label %bb3, label %bb1 |
| |
| bb3: ; preds = %bb1 |
| %11 = add nsw i64 %i.041, 1 |
| %exitcond20 = icmp eq i64 %11, %n |
| br i1 %exitcond20, label %bb10.preheader, label %bb.nph40 |
| |
| bb10.preheader: ; preds = %bb3 |
| br i1 %0, label %bb.nph38.bb.nph38.split_crit_edge, label %return |
| |
| bb.nph30: ; preds = %bb.nph38.bb.nph38.split_crit_edge, %bb9 |
| %i.134 = phi i64 [ 0, %bb.nph38.bb.nph38.split_crit_edge ], [ %18, %bb9 ] |
| %scevgep59 = getelementptr [4000 x double]* @x, i64 0, i64 %i.134 |
| %.promoted31 = load double* %scevgep59 |
| br label %bb7 |
| |
| bb7: ; preds = %bb7, %bb.nph30 |
| %.tmp.032 = phi double [ %.promoted31, %bb.nph30 ], [ %16, %bb7 ] |
| %j.129 = phi i64 [ 0, %bb.nph30 ], [ %17, %bb7 ] |
| %scevgep56 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %j.129, i64 %i.134 |
| %scevgep55 = getelementptr [4000 x double]* @y, i64 0, i64 %j.129 |
| %12 = load double* %scevgep56, align 8 |
| %13 = fmul double %12, %19 |
| %14 = load double* %scevgep55, align 8 |
| %15 = fmul double %13, %14 |
| %16 = fadd double %.tmp.032, %15 |
| %17 = add nsw i64 %j.129, 1 |
| %exitcond10 = icmp eq i64 %17, %n |
| br i1 %exitcond10, label %bb9, label %bb7 |
| |
| bb9: ; preds = %bb7 |
| %.lcssa9 = phi double [ %16, %bb7 ] |
| store double %.lcssa9, double* %scevgep59 |
| %18 = add nsw i64 %i.134, 1 |
| %exitcond13 = icmp eq i64 %18, %n |
| br i1 %exitcond13, label %bb13.preheader, label %bb.nph30 |
| |
| bb.nph38.bb.nph38.split_crit_edge: ; preds = %bb10.preheader |
| %19 = load double* @beta, align 8 |
| br label %bb.nph30 |
| |
| bb13.preheader: ; preds = %bb9 |
| br i1 %0, label %bb12.preheader, label %return |
| |
| bb12.preheader: ; preds = %bb13.preheader |
| br label %bb12 |
| |
| bb12: ; preds = %bb12.preheader, %bb12 |
| %i.227 = phi i64 [ %23, %bb12 ], [ 0, %bb12.preheader ] |
| %scevgep52 = getelementptr [4000 x double]* @z, i64 0, i64 %i.227 |
| %scevgep51 = getelementptr [4000 x double]* @x, i64 0, i64 %i.227 |
| %20 = load double* %scevgep51, align 8 |
| %21 = load double* %scevgep52, align 8 |
| %22 = fadd double %20, %21 |
| store double %22, double* %scevgep51, align 8 |
| %23 = add nsw i64 %i.227, 1 |
| %exitcond6 = icmp eq i64 %23, %n |
| br i1 %exitcond6, label %bb19.preheader, label %bb12 |
| |
| bb19.preheader: ; preds = %bb12 |
| br i1 %0, label %bb.nph26.bb.nph26.split_crit_edge, label %return |
| |
| bb.nph: ; preds = %bb.nph26.bb.nph26.split_crit_edge, %bb18 |
| %i.322 = phi i64 [ 0, %bb.nph26.bb.nph26.split_crit_edge ], [ %30, %bb18 ] |
| %scevgep49 = getelementptr [4000 x double]* @w, i64 0, i64 %i.322 |
| %.promoted = load double* %scevgep49 |
| br label %bb16 |
| |
| bb16: ; preds = %bb16, %bb.nph |
| %.tmp.0 = phi double [ %.promoted, %bb.nph ], [ %28, %bb16 ] |
| %j.221 = phi i64 [ 0, %bb.nph ], [ %29, %bb16 ] |
| %scevgep46 = getelementptr [4000 x [4000 x double]]* @A, i64 0, i64 %i.322, i64 %j.221 |
| %scevgep = getelementptr [4000 x double]* @x, i64 0, i64 %j.221 |
| %24 = load double* %scevgep46, align 8 |
| %25 = fmul double %24, %31 |
| %26 = load double* %scevgep, align 8 |
| %27 = fmul double %25, %26 |
| %28 = fadd double %.tmp.0, %27 |
| %29 = add nsw i64 %j.221, 1 |
| %exitcond1 = icmp eq i64 %29, %n |
| br i1 %exitcond1, label %bb18, label %bb16 |
| |
| bb18: ; preds = %bb16 |
| %.lcssa = phi double [ %28, %bb16 ] |
| store double %.lcssa, double* %scevgep49 |
| %30 = add nsw i64 %i.322, 1 |
| %exitcond = icmp eq i64 %30, %n |
| br i1 %exitcond, label %return.loopexit, label %bb.nph |
| |
| bb.nph26.bb.nph26.split_crit_edge: ; preds = %bb19.preheader |
| %31 = load double* @alpha, align 8 |
| br label %bb.nph |
| |
| return.loopexit: ; preds = %bb18 |
| br label %return |
| |
| return: ; preds = %return.loopexit, %bb19.preheader, %bb13.preheader, %bb10.preheader, %entry |
| ret void |
| } |
| ; CHECK: for region: 'entry.split => return' in function 'scop_func': |