| ; RUN: opt %loadPolly %defaultOpts -polly-analyze-ir -print-top-scop-only -analyze %s | FileCheck %s |
| ; XFAIL: * |
| ; ModuleID = './stencils/adi/adi_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 } |
| |
| @X = common global [1024 x [1024 x double]] zeroinitializer, align 32 |
| @A = common global [1024 x [1024 x double]] zeroinitializer, align 32 |
| @B = common global [1024 x [1024 x double]] zeroinitializer, align 32 |
| @stderr = external global %struct._IO_FILE* |
| @.str = private constant [8 x i8] c"%0.2lf \00", align 1 |
| |
| define void @scop_func(i64 %n) nounwind { |
| bb.nph81: |
| %0 = icmp sgt i64 %n, 0 |
| %1 = icmp sgt i64 %n, 1 |
| %2 = add nsw i64 %n, -2 |
| %3 = icmp sgt i64 %2, 0 |
| %4 = add nsw i64 %n, -3 |
| %tmp = add i64 %n, -1 |
| br label %bb5.preheader |
| |
| bb.nph: ; preds = %bb.nph.preheader, %bb4 |
| %storemerge112 = phi i64 [ %16, %bb4 ], [ 0, %bb.nph.preheader ] |
| %scevgep86.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge112, i64 0 |
| %scevgep85.phi.trans.insert = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge112, i64 0 |
| %.pre = load double* %scevgep85.phi.trans.insert, align 32 |
| %.pre149 = load double* %scevgep86.phi.trans.insert, align 32 |
| br label %bb2 |
| |
| bb2: ; preds = %bb2, %bb.nph |
| %5 = phi double [ %.pre149, %bb.nph ], [ %15, %bb2 ] |
| %6 = phi double [ %.pre, %bb.nph ], [ %11, %bb2 ] |
| %indvar = phi i64 [ 0, %bb.nph ], [ %tmp90, %bb2 ] |
| %tmp42 = add i64 %indvar, 1 |
| %scevgep84 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge112, i64 %tmp42 |
| %scevgep83 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %storemerge112, i64 %tmp42 |
| %scevgep = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge112, i64 %tmp42 |
| %tmp90 = add i64 %indvar, 1 |
| %7 = load double* %scevgep, align 8 |
| %8 = load double* %scevgep83, align 8 |
| %9 = fmul double %6, %8 |
| %10 = fdiv double %9, %5 |
| %11 = fsub double %7, %10 |
| store double %11, double* %scevgep, align 8 |
| %12 = load double* %scevgep84, align 8 |
| %13 = fmul double %8, %8 |
| %14 = fdiv double %13, %5 |
| %15 = fsub double %12, %14 |
| store double %15, double* %scevgep84, align 8 |
| %exitcond37 = icmp eq i64 %tmp90, %tmp |
| br i1 %exitcond37, label %bb4, label %bb2 |
| |
| bb4: ; preds = %bb2 |
| %16 = add nsw i64 %storemerge112, 1 |
| %exitcond = icmp eq i64 %16, %n |
| br i1 %exitcond, label %bb8.loopexit.loopexit, label %bb.nph |
| |
| bb.nph16: ; preds = %bb5.preheader |
| br i1 %1, label %bb.nph.preheader, label %bb8.loopexit |
| |
| bb.nph.preheader: ; preds = %bb.nph16 |
| br label %bb.nph |
| |
| bb7: ; preds = %bb7.preheader, %bb7 |
| %storemerge217 = phi i64 [ %20, %bb7 ], [ 0, %bb7.preheader ] |
| %scevgep96 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge217, i64 %tmp |
| %scevgep95 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge217, i64 %tmp |
| %17 = load double* %scevgep95, align 8 |
| %18 = load double* %scevgep96, align 8 |
| %19 = fdiv double %17, %18 |
| store double %19, double* %scevgep95, align 8 |
| %20 = add nsw i64 %storemerge217, 1 |
| %exitcond18 = icmp eq i64 %20, %n |
| br i1 %exitcond18, label %bb14.loopexit, label %bb7 |
| |
| bb8.loopexit.loopexit: ; preds = %bb4 |
| br label %bb8.loopexit |
| |
| bb8.loopexit: ; preds = %bb8.loopexit.loopexit, %bb.nph16 |
| br i1 %0, label %bb7.preheader, label %bb20.loopexit |
| |
| bb7.preheader: ; preds = %bb8.loopexit |
| br label %bb7 |
| |
| bb11: ; preds = %bb12.preheader, %bb11 |
| %storemerge920 = phi i64 [ %28, %bb11 ], [ 0, %bb12.preheader ] |
| %tmp30 = mul i64 %storemerge920, -1 |
| %tmp31 = add i64 %4, %tmp30 |
| %scevgep104 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %storemerge323, i64 %tmp31 |
| %scevgep103 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %storemerge323, i64 %tmp31 |
| %scevgep102 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge323, i64 %tmp31 |
| %tmp35 = add i64 %2, %tmp30 |
| %scevgep100 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %storemerge323, i64 %tmp35 |
| %21 = load double* %scevgep100, align 8 |
| %22 = load double* %scevgep102, align 8 |
| %23 = load double* %scevgep103, align 8 |
| %24 = fmul double %22, %23 |
| %25 = fsub double %21, %24 |
| %26 = load double* %scevgep104, align 8 |
| %27 = fdiv double %25, %26 |
| store double %27, double* %scevgep100, align 8 |
| %28 = add nsw i64 %storemerge920, 1 |
| %exitcond21 = icmp eq i64 %28, %2 |
| br i1 %exitcond21, label %bb13, label %bb11 |
| |
| bb13: ; preds = %bb11 |
| %29 = add nsw i64 %storemerge323, 1 |
| %exitcond29 = icmp eq i64 %29, %n |
| br i1 %exitcond29, label %bb20.loopexit.loopexit, label %bb12.preheader |
| |
| bb14.loopexit: ; preds = %bb7 |
| %.not = xor i1 %0, true |
| %.not150 = xor i1 %3, true |
| %brmerge = or i1 %.not, %.not150 |
| br i1 %brmerge, label %bb20.loopexit, label %bb12.preheader.preheader |
| |
| bb12.preheader.preheader: ; preds = %bb14.loopexit |
| br label %bb12.preheader |
| |
| bb12.preheader: ; preds = %bb12.preheader.preheader, %bb13 |
| %storemerge323 = phi i64 [ %29, %bb13 ], [ 0, %bb12.preheader.preheader ] |
| br label %bb11 |
| |
| bb17: ; preds = %bb18.preheader, %bb17 |
| %storemerge828 = phi i64 [ %41, %bb17 ], [ 0, %bb18.preheader ] |
| %scevgep119 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %indvar114, i64 %storemerge828 |
| %scevgep118 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %indvar114, i64 %storemerge828 |
| %scevgep121 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp11, i64 %storemerge828 |
| %scevgep120 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp11, i64 %storemerge828 |
| %scevgep117 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp11, i64 %storemerge828 |
| %30 = load double* %scevgep117, align 8 |
| %31 = load double* %scevgep118, align 8 |
| %32 = load double* %scevgep120, align 8 |
| %33 = fmul double %31, %32 |
| %34 = load double* %scevgep119, align 8 |
| %35 = fdiv double %33, %34 |
| %36 = fsub double %30, %35 |
| store double %36, double* %scevgep117, align 8 |
| %37 = load double* %scevgep121, align 8 |
| %38 = fmul double %32, %32 |
| %39 = fdiv double %38, %34 |
| %40 = fsub double %37, %39 |
| store double %40, double* %scevgep121, align 8 |
| %41 = add nsw i64 %storemerge828, 1 |
| %exitcond1 = icmp eq i64 %41, %n |
| br i1 %exitcond1, label %bb19, label %bb17 |
| |
| bb19: ; preds = %bb17 |
| %tmp125 = add i64 %indvar114, 1 |
| %exitcond8 = icmp eq i64 %tmp125, %tmp |
| br i1 %exitcond8, label %bb23.loopexit.loopexit, label %bb18.preheader |
| |
| bb20.loopexit.loopexit: ; preds = %bb13 |
| br label %bb20.loopexit |
| |
| bb20.loopexit: ; preds = %bb20.loopexit.loopexit, %bb5.preheader, %bb14.loopexit, %bb8.loopexit |
| br i1 %1, label %bb.nph34, label %bb23.loopexit |
| |
| bb.nph34: ; preds = %bb20.loopexit |
| br i1 %0, label %bb18.preheader.preheader, label %bb29.loopexit |
| |
| bb18.preheader.preheader: ; preds = %bb.nph34 |
| br label %bb18.preheader |
| |
| bb18.preheader: ; preds = %bb18.preheader.preheader, %bb19 |
| %indvar114 = phi i64 [ %tmp125, %bb19 ], [ 0, %bb18.preheader.preheader ] |
| %tmp11 = add i64 %indvar114, 1 |
| br label %bb17 |
| |
| bb22: ; preds = %bb22.preheader, %bb22 |
| %storemerge535 = phi i64 [ %45, %bb22 ], [ 0, %bb22.preheader ] |
| %scevgep131 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp, i64 %storemerge535 |
| %scevgep130 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp, i64 %storemerge535 |
| %42 = load double* %scevgep130, align 8 |
| %43 = load double* %scevgep131, align 8 |
| %44 = fdiv double %42, %43 |
| store double %44, double* %scevgep130, align 8 |
| %45 = add nsw i64 %storemerge535, 1 |
| %exitcond15 = icmp eq i64 %45, %n |
| br i1 %exitcond15, label %bb29.loopexit.loopexit, label %bb22 |
| |
| bb23.loopexit.loopexit: ; preds = %bb19 |
| br label %bb23.loopexit |
| |
| bb23.loopexit: ; preds = %bb23.loopexit.loopexit, %bb20.loopexit |
| br i1 %0, label %bb22.preheader, label %bb29.loopexit |
| |
| bb22.preheader: ; preds = %bb23.loopexit |
| br label %bb22 |
| |
| bb26: ; preds = %bb27.preheader, %bb26 |
| %storemerge737 = phi i64 [ %53, %bb26 ], [ 0, %bb27.preheader ] |
| %scevgep138 = getelementptr [1024 x [1024 x double]]* @A, i64 0, i64 %tmp58, i64 %storemerge737 |
| %scevgep137 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp58, i64 %storemerge737 |
| %scevgep139 = getelementptr [1024 x [1024 x double]]* @B, i64 0, i64 %tmp61, i64 %storemerge737 |
| %scevgep135 = getelementptr [1024 x [1024 x double]]* @X, i64 0, i64 %tmp61, i64 %storemerge737 |
| %46 = load double* %scevgep135, align 8 |
| %47 = load double* %scevgep137, align 8 |
| %48 = load double* %scevgep138, align 8 |
| %49 = fmul double %47, %48 |
| %50 = fsub double %46, %49 |
| %51 = load double* %scevgep139, align 8 |
| %52 = fdiv double %50, %51 |
| store double %52, double* %scevgep135, align 8 |
| %53 = add nsw i64 %storemerge737, 1 |
| %exitcond48 = icmp eq i64 %53, %n |
| br i1 %exitcond48, label %bb28, label %bb26 |
| |
| bb28: ; preds = %bb26 |
| %54 = add nsw i64 %storemerge640, 1 |
| %exitcond56 = icmp eq i64 %54, %2 |
| br i1 %exitcond56, label %bb30.loopexit, label %bb27.preheader |
| |
| bb29.loopexit.loopexit: ; preds = %bb22 |
| br label %bb29.loopexit |
| |
| bb29.loopexit: ; preds = %bb29.loopexit.loopexit, %bb23.loopexit, %bb.nph34 |
| %.not151 = xor i1 %3, true |
| %.not152 = xor i1 %0, true |
| %brmerge153 = or i1 %.not151, %.not152 |
| br i1 %brmerge153, label %bb30, label %bb27.preheader.preheader |
| |
| bb27.preheader.preheader: ; preds = %bb29.loopexit |
| br label %bb27.preheader |
| |
| bb27.preheader: ; preds = %bb27.preheader.preheader, %bb28 |
| %storemerge640 = phi i64 [ %54, %bb28 ], [ 0, %bb27.preheader.preheader ] |
| %tmp57 = mul i64 %storemerge640, -1 |
| %tmp58 = add i64 %4, %tmp57 |
| %tmp61 = add i64 %2, %tmp57 |
| br label %bb26 |
| |
| bb30.loopexit: ; preds = %bb28 |
| br label %bb30 |
| |
| bb30: ; preds = %bb30.loopexit, %bb29.loopexit |
| %55 = add nsw i64 %storemerge46, 1 |
| %exitcond64 = icmp eq i64 %55, 10 |
| br i1 %exitcond64, label %return, label %bb5.preheader |
| |
| bb5.preheader: ; preds = %bb30, %bb.nph81 |
| %storemerge46 = phi i64 [ 0, %bb.nph81 ], [ %55, %bb30 ] |
| br i1 %0, label %bb.nph16, label %bb20.loopexit |
| |
| return: ; preds = %bb30 |
| ret void |
| } |