1dd3b6498SWhitney Tsang; RUN: opt < %s -passes='print<loop-cache-cost>' -disable-output 2>&1 | FileCheck %s 2dd3b6498SWhitney Tsang 3dd3b6498SWhitney Tsangtarget datalayout = "e-m:e-i64:64-n32:64" 4dd3b6498SWhitney Tsangtarget triple = "powerpc64le-unknown-linux-gnu" 5dd3b6498SWhitney Tsang 6dd3b6498SWhitney Tsang; void foo(long n, long m, long o, int A[n][m], int B[n][m], int C[n]) { 7dd3b6498SWhitney Tsang; for (long i = 0; i < n; i++) 8dd3b6498SWhitney Tsang; for (long j = 0; j < m; j++) { 9dd3b6498SWhitney Tsang; A[i][j] = A[i][j+1] + B[i-1][j] + B[i+1][j+1] + C[i]; 10dd3b6498SWhitney Tsang; A[i][j] += B[i][i]; 11dd3b6498SWhitney Tsang; } 12dd3b6498SWhitney Tsang; } 13dd3b6498SWhitney Tsang 14*67025946SRouzbeh; CHECK: Loop 'for.i' has cost = 20800 15*67025946SRouzbeh; CHECK-NEXT: Loop 'for.j' has cost = 1000 16dd3b6498SWhitney Tsang 171aee1e1fSNikita Popovdefine void @foo(i64 %n, i64 %m, ptr %A, ptr %B, ptr %C) { 18dd3b6498SWhitney Tsangentry: 19dd3b6498SWhitney Tsang %cmp32 = icmp sgt i64 %n, 0 20dd3b6498SWhitney Tsang %cmp230 = icmp sgt i64 %m, 0 21dd3b6498SWhitney Tsang br i1 %cmp32, label %for.cond1.preheader.lr.ph, label %for.end 22dd3b6498SWhitney Tsang 23dd3b6498SWhitney Tsangfor.cond1.preheader.lr.ph: ; preds = %entry 24dd3b6498SWhitney Tsang br i1 %cmp230, label %for.i.preheader, label %for.end 25dd3b6498SWhitney Tsang 26dd3b6498SWhitney Tsangfor.i.preheader: ; preds = %for.cond1.preheader.lr.ph 27dd3b6498SWhitney Tsang br label %for.i 28dd3b6498SWhitney Tsang 29dd3b6498SWhitney Tsangfor.i: ; preds = %for.inci, %for.i.preheader.split 30dd3b6498SWhitney Tsang %i = phi i64 [ %inci, %for.inci ], [ 0, %for.i.preheader ] 31dd3b6498SWhitney Tsang %subione = sub i64 %i, 1 32dd3b6498SWhitney Tsang %addione = add i64 %i, 1 33dd3b6498SWhitney Tsang %muli = mul i64 %i, %m 34dd3b6498SWhitney Tsang %muliminusone = mul i64 %subione, %m 35dd3b6498SWhitney Tsang %muliplusone = mul i64 %addione, %m 36dd3b6498SWhitney Tsang br label %for.j 37dd3b6498SWhitney Tsang 38dd3b6498SWhitney Tsangfor.j: ; preds = %for.incj, %for.i 39dd3b6498SWhitney Tsang %j = phi i64 [ %incj, %for.incj ], [ 0, %for.i ] 40dd3b6498SWhitney Tsang %addj = add i64 %muli, %j 41dd3b6498SWhitney Tsang 42dd3b6498SWhitney Tsang ; B[i-1][j] 43dd3b6498SWhitney Tsang %arrayidx1 = add i64 %j, %muliminusone 441aee1e1fSNikita Popov %arrayidx2 = getelementptr inbounds i32, ptr %B, i64 %arrayidx1 451aee1e1fSNikita Popov %elem_B1 = load i32, ptr %arrayidx2, align 4 46dd3b6498SWhitney Tsang 47dd3b6498SWhitney Tsang ; B[i-1][j+1] 48dd3b6498SWhitney Tsang %addjone = add i64 %j, 1 49dd3b6498SWhitney Tsang %arrayidx3 = add i64 %addjone, %muliminusone 501aee1e1fSNikita Popov %arrayidx4 = getelementptr inbounds i32, ptr %B, i64 %arrayidx3 511aee1e1fSNikita Popov %elem_B2 = load i32, ptr %arrayidx4, align 4 52dd3b6498SWhitney Tsang 53dd3b6498SWhitney Tsang ; C[i] 541aee1e1fSNikita Popov %arrayidx6 = getelementptr inbounds i32, ptr %C, i64 %i 551aee1e1fSNikita Popov %elem_C = load i32, ptr %arrayidx6, align 4 56dd3b6498SWhitney Tsang 57dd3b6498SWhitney Tsang ; A[i][j+1] 58dd3b6498SWhitney Tsang %arrayidx7 = add i64 %addjone, %muli 591aee1e1fSNikita Popov %arrayidx8 = getelementptr inbounds i32, ptr %A, i64 %arrayidx7 601aee1e1fSNikita Popov %elem_A = load i32, ptr %arrayidx8, align 4 61dd3b6498SWhitney Tsang 62dd3b6498SWhitney Tsang ; A[i][j] = A[i][j+1] + B[i-1][j] + B[i-1][j+1] + C[i] 63dd3b6498SWhitney Tsang %addB = add i32 %elem_B1, %elem_B2 64dd3b6498SWhitney Tsang %addC = add i32 %addB, %elem_C 65dd3b6498SWhitney Tsang %addA = add i32 %elem_A, %elem_C 66dd3b6498SWhitney Tsang %arrayidx9 = add i64 %j, %muli 671aee1e1fSNikita Popov %arrayidx10 = getelementptr inbounds i32, ptr %A, i64 %arrayidx9 681aee1e1fSNikita Popov store i32 %addA, ptr %arrayidx10, align 4 69dd3b6498SWhitney Tsang 70dd3b6498SWhitney Tsang ; A[i][j] += B[i][i]; 71dd3b6498SWhitney Tsang %arrayidx11 = add i64 %j, %muli 721aee1e1fSNikita Popov %arrayidx12 = getelementptr inbounds i32, ptr %A, i64 %arrayidx11 731aee1e1fSNikita Popov %elem_A1 = load i32, ptr %arrayidx12, align 4 74dd3b6498SWhitney Tsang %arrayidx13 = add i64 %i, %muli 751aee1e1fSNikita Popov %arrayidx14 = getelementptr inbounds i32, ptr %B, i64 %arrayidx13 761aee1e1fSNikita Popov %elem_B3 = load i32, ptr %arrayidx14, align 4 77dd3b6498SWhitney Tsang %addA1 = add i32 %elem_A1, %elem_B3 781aee1e1fSNikita Popov store i32 %addA1, ptr %arrayidx12, align 4 79dd3b6498SWhitney Tsang 80dd3b6498SWhitney Tsang br label %for.incj 81dd3b6498SWhitney Tsang 82dd3b6498SWhitney Tsangfor.incj: ; preds = %for.j 83dd3b6498SWhitney Tsang %incj = add nsw i64 %j, 1 84dd3b6498SWhitney Tsang %exitcond54.us = icmp eq i64 %incj, %m 85dd3b6498SWhitney Tsang br i1 %exitcond54.us, label %for.inci, label %for.j 86dd3b6498SWhitney Tsang 87dd3b6498SWhitney Tsangfor.inci: ; preds = %for.incj 88dd3b6498SWhitney Tsang %inci = add nsw i64 %i, 1 89dd3b6498SWhitney Tsang %exitcond55.us = icmp eq i64 %inci, %n 90dd3b6498SWhitney Tsang br i1 %exitcond55.us, label %for.end.loopexit, label %for.i 91dd3b6498SWhitney Tsang 92dd3b6498SWhitney Tsangfor.end.loopexit: ; preds = %for.inci 93dd3b6498SWhitney Tsang br label %for.end 94dd3b6498SWhitney Tsang 95dd3b6498SWhitney Tsangfor.end: ; preds = %for.end.loopexit, %for.cond1.preheader.lr.ph, %entry 96dd3b6498SWhitney Tsang ret void 97dd3b6498SWhitney Tsang} 98dd3b6498SWhitney Tsang 99