1db800c26SBardia Mahjour; RUN: opt < %s -disable-output "-passes=print<ddg>" 2>&1 | FileCheck %s 2db800c26SBardia Mahjour 3db800c26SBardia Mahjour 4db800c26SBardia Mahjour; CHECK-LABEL: 'DDG' for loop 'test1.for.cond1.preheader': 52dd82a1cSBardia Mahjour 686acaa94SBardia Mahjour; CHECK: Node Address:[[N1:0x[0-9a-f]*]]:pi-block 72dd82a1cSBardia Mahjour; CHECK-NEXT:--- start of nodes in pi-block --- 886acaa94SBardia Mahjour; CHECK: Node Address:[[N2:0x[0-9a-f]*]]:single-instruction 92dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 102dd82a1cSBardia Mahjour; CHECK-NEXT: %j.02 = phi i64 [ %inc, %for.body4 ], [ 1, %for.body4.preheader ] 112dd82a1cSBardia Mahjour; CHECK-NEXT: Edges: 1286acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N3:0x[0-9a-f]*]] 1386acaa94SBardia Mahjour 1486acaa94SBardia Mahjour; CHECK: Node Address:[[N3]]:single-instruction 1586acaa94SBardia Mahjour; CHECK-NEXT: Instructions: 1686acaa94SBardia Mahjour; CHECK-NEXT: %inc = add i64 %j.02, 1 1786acaa94SBardia Mahjour; CHECK-NEXT: Edges: 1886acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N2]] 192dd82a1cSBardia Mahjour; CHECK-NEXT:--- end of nodes in pi-block --- 202dd82a1cSBardia Mahjour; CHECK-NEXT: Edges: 2186acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N4:0x[0-9a-f]*]] 2286acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N5:0x[0-9a-f]*]] 2386acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N6:0x[0-9a-f]*]] 242dd82a1cSBardia Mahjour; CHECK-NEXT: [def-use] to [[N7:0x[0-9a-f]*]] 25db800c26SBardia Mahjour 2686acaa94SBardia Mahjour; CHECK: Node Address:[[N5]]:single-instruction 27db800c26SBardia Mahjour; CHECK-NEXT: Instructions: 282dd82a1cSBardia Mahjour; CHECK-NEXT: %sub7 = add i64 %j.02, -1 29db800c26SBardia Mahjour; CHECK-NEXT: Edges: 3086acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N8:0x[0-9a-f]*]] 31db800c26SBardia Mahjour 3286acaa94SBardia Mahjour; CHECK: Node Address:[[N9:0x[0-9a-f]*]]:pi-block 332dd82a1cSBardia Mahjour; CHECK-NEXT:--- start of nodes in pi-block --- 3486acaa94SBardia Mahjour; CHECK: Node Address:[[N10:0x[0-9a-f]*]]:single-instruction 352dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 362dd82a1cSBardia Mahjour; CHECK-NEXT: %i.04 = phi i64 [ %inc13, %for.inc12 ], [ 0, %test1.for.cond1.preheader.preheader ] 372dd82a1cSBardia Mahjour; CHECK-NEXT: Edges: 3886acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N11:0x[0-9a-f]*]] 3986acaa94SBardia Mahjour 4086acaa94SBardia Mahjour; CHECK: Node Address:[[N11]]:single-instruction 4186acaa94SBardia Mahjour; CHECK-NEXT: Instructions: 4286acaa94SBardia Mahjour; CHECK-NEXT: %inc13 = add i64 %i.04, 1 4386acaa94SBardia Mahjour; CHECK-NEXT: Edges: 4486acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N10]] 452dd82a1cSBardia Mahjour; CHECK-NEXT:--- end of nodes in pi-block --- 462dd82a1cSBardia Mahjour; CHECK-NEXT: Edges: 4786acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N12:0x[0-9a-f]*]] 4886acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N13:0x[0-9a-f]*]] 492dd82a1cSBardia Mahjour; CHECK-NEXT: [def-use] to [[N14:0x[0-9a-f]*]] 5086acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N15:0x[0-9a-f]*]] 512dd82a1cSBardia Mahjour 520a2626d0SBardia Mahjour; CHECK: Node Address:[[N15]]:multi-instruction 532dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 542dd82a1cSBardia Mahjour; CHECK-NEXT: %exitcond = icmp ne i64 %inc13, %n 552dd82a1cSBardia Mahjour; CHECK-NEXT: br i1 %exitcond, label %test1.for.cond1.preheader, label %for.end14.loopexit 56db800c26SBardia Mahjour; CHECK-NEXT: Edges:none! 57db800c26SBardia Mahjour 580a2626d0SBardia Mahjour; CHECK: Node Address:[[N14]]:multi-instruction 592dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 602dd82a1cSBardia Mahjour; CHECK-NEXT: %4 = mul nsw i64 %i.04, %n 61*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx10 = getelementptr inbounds float, ptr %a, i64 %4 622dd82a1cSBardia Mahjour; CHECK-NEXT: Edges: 6386acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N6]] 64db800c26SBardia Mahjour 65f0af11d8Sbmahjour; CHECK: Node Address:[[N6]]:single-instruction 66db800c26SBardia Mahjour; CHECK-NEXT: Instructions: 67*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx11 = getelementptr inbounds float, ptr %arrayidx10, i64 %j.02 68db800c26SBardia Mahjour; CHECK-NEXT: Edges: 6986acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N18:0x[0-9a-f]*]] 70db800c26SBardia Mahjour 710a2626d0SBardia Mahjour; CHECK: Node Address:[[N13]]:multi-instruction 72db800c26SBardia Mahjour; CHECK-NEXT: Instructions: 7386acaa94SBardia Mahjour; CHECK-NEXT: %2 = mul nsw i64 %i.04, %n 74*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx6 = getelementptr inbounds float, ptr %a, i64 %2 7586acaa94SBardia Mahjour; CHECK-NEXT: Edges: 7686acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N8]] 77db800c26SBardia Mahjour 78f0af11d8Sbmahjour; CHECK: Node Address:[[N8]]:single-instruction 79db800c26SBardia Mahjour; CHECK-NEXT: Instructions: 80*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx8 = getelementptr inbounds float, ptr %arrayidx6, i64 %sub7 8186acaa94SBardia Mahjour; CHECK-NEXT: Edges: 8286acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N18]] 8386acaa94SBardia Mahjour 840a2626d0SBardia Mahjour; CHECK: Node Address:[[N12]]:multi-instruction 8586acaa94SBardia Mahjour; CHECK-NEXT: Instructions: 8686acaa94SBardia Mahjour; CHECK-NEXT: %0 = mul nsw i64 %i.04, %n 87*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx = getelementptr inbounds float, ptr %b, i64 %0 8886acaa94SBardia Mahjour; CHECK-NEXT: Edges: 8986acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N4]] 9086acaa94SBardia Mahjour 910a2626d0SBardia Mahjour; CHECK: Node Address:[[N4]]:multi-instruction 9286acaa94SBardia Mahjour; CHECK-NEXT: Instructions: 93*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx5 = getelementptr inbounds float, ptr %arrayidx, i64 %j.02 94*7cf55817SMatt Arsenault; CHECK-NEXT: %1 = load float, ptr %arrayidx5, align 4 95db800c26SBardia Mahjour; CHECK-NEXT: Edges: 9686acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N18]] 97f0af11d8Sbmahjour 9886acaa94SBardia Mahjour; CHECK: Node Address:[[N18]]:pi-block 99f0af11d8Sbmahjour; CHECK-NEXT:--- start of nodes in pi-block --- 100f0af11d8Sbmahjour; CHECK: Node Address:[[N22:0x[0-9a-f]*]]:single-instruction 101f0af11d8Sbmahjour; CHECK-NEXT: Instructions: 102*7cf55817SMatt Arsenault; CHECK-NEXT: %3 = load float, ptr %arrayidx8, align 4 103f0af11d8Sbmahjour; CHECK-NEXT: Edges: 104f0af11d8Sbmahjour; CHECK-NEXT: [def-use] to [[N23:0x[0-9a-f]*]] 105f0af11d8Sbmahjour 106f0af11d8Sbmahjour; CHECK: Node Address:[[N23]]:single-instruction 107f0af11d8Sbmahjour; CHECK-NEXT: Instructions: 10886acaa94SBardia Mahjour; CHECK-NEXT: %add = fadd float %1, %3 10986acaa94SBardia Mahjour; CHECK-NEXT: Edges: 11086acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N24:0x[0-9a-f]*]] 11186acaa94SBardia Mahjour 11286acaa94SBardia Mahjour; CHECK: Node Address:[[N24]]:single-instruction 11386acaa94SBardia Mahjour; CHECK-NEXT: Instructions: 114*7cf55817SMatt Arsenault; CHECK-NEXT: store float %add, ptr %arrayidx11, align 4 115f0af11d8Sbmahjour; CHECK-NEXT: Edges: 11686acaa94SBardia Mahjour; CHECK-NEXT: [memory] to [[N22]] 117f0af11d8Sbmahjour; CHECK-NEXT:--- end of nodes in pi-block --- 118f0af11d8Sbmahjour; CHECK-NEXT: Edges:none! 119f0af11d8Sbmahjour 12086acaa94SBardia Mahjour; CHECK: Node Address:[[N25:0x[0-9a-f]*]]:single-instruction 121f0af11d8Sbmahjour; CHECK-NEXT: Instructions: 1222dd82a1cSBardia Mahjour; CHECK-NEXT: br label %for.inc12 1232dd82a1cSBardia Mahjour; CHECK-NEXT: Edges:none! 12467f0685bSBardia Mahjour 12586acaa94SBardia Mahjour; CHECK: Node Address:[[N26:0x[0-9a-f]*]]:single-instruction 12667f0685bSBardia Mahjour; CHECK-NEXT: Instructions: 1272dd82a1cSBardia Mahjour; CHECK-NEXT: br label %for.body4 1282dd82a1cSBardia Mahjour; CHECK-NEXT: Edges:none! 12967f0685bSBardia Mahjour 13086acaa94SBardia Mahjour; CHECK: Node Address:[[N27:0x[0-9a-f]*]]:single-instruction 13167f0685bSBardia Mahjour; CHECK-NEXT: Instructions: 1322dd82a1cSBardia Mahjour; CHECK-NEXT: %sub = add i64 %n, -1 13367f0685bSBardia Mahjour; CHECK-NEXT: Edges: 13486acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N7]] 13586acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N28:0x[0-9a-f]*]] 136f0af11d8Sbmahjour 1370a2626d0SBardia Mahjour; CHECK: Node Address:[[N28]]:multi-instruction 1382dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 1392dd82a1cSBardia Mahjour; CHECK-NEXT: %cmp21 = icmp ult i64 1, %sub 1402dd82a1cSBardia Mahjour; CHECK-NEXT: br i1 %cmp21, label %for.body4.preheader, label %for.inc12 1412dd82a1cSBardia Mahjour; CHECK-NEXT: Edges:none! 1422dd82a1cSBardia Mahjour 1430a2626d0SBardia Mahjour; CHECK: Node Address:[[N7]]:multi-instruction 1442dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 1452dd82a1cSBardia Mahjour; CHECK-NEXT: %cmp2 = icmp ult i64 %inc, %sub 1462dd82a1cSBardia Mahjour; CHECK-NEXT: br i1 %cmp2, label %for.body4, label %for.inc12.loopexit 1472dd82a1cSBardia Mahjour; CHECK-NEXT: Edges:none! 148db800c26SBardia Mahjour 149db800c26SBardia Mahjour 150db800c26SBardia Mahjour;; This test has a cycle. 151db800c26SBardia Mahjour;; void test1(unsigned long n, float a[][n], float b[][n]) { 152db800c26SBardia Mahjour;; for (unsigned long i = 0; i < n; i++) 153db800c26SBardia Mahjour;; for (unsigned long j = 1; j < n-1; j++) 154db800c26SBardia Mahjour;; a[i][j] = b[i][j] + a[i][j-1]; 155db800c26SBardia Mahjour;; } 156db800c26SBardia Mahjour 157*7cf55817SMatt Arsenaultdefine void @test1(i64 %n, ptr noalias %a, ptr noalias %b) { 158db800c26SBardia Mahjourentry: 159db800c26SBardia Mahjour %exitcond3 = icmp ne i64 0, %n 160db800c26SBardia Mahjour br i1 %exitcond3, label %test1.for.cond1.preheader, label %for.end14 161db800c26SBardia Mahjour 162db800c26SBardia Mahjourtest1.for.cond1.preheader: ; preds = %entry, %for.inc12 163db800c26SBardia Mahjour %i.04 = phi i64 [ %inc13, %for.inc12 ], [ 0, %entry ] 164db800c26SBardia Mahjour %sub = add i64 %n, -1 165db800c26SBardia Mahjour %cmp21 = icmp ult i64 1, %sub 166db800c26SBardia Mahjour br i1 %cmp21, label %for.body4, label %for.inc12 167db800c26SBardia Mahjour 168db800c26SBardia Mahjourfor.body4: ; preds = %test1.for.cond1.preheader, %for.body4 169db800c26SBardia Mahjour %j.02 = phi i64 [ %inc, %for.body4 ], [ 1, %test1.for.cond1.preheader ] 170db800c26SBardia Mahjour %0 = mul nsw i64 %i.04, %n 171*7cf55817SMatt Arsenault %arrayidx = getelementptr inbounds float, ptr %b, i64 %0 172*7cf55817SMatt Arsenault %arrayidx5 = getelementptr inbounds float, ptr %arrayidx, i64 %j.02 173*7cf55817SMatt Arsenault %1 = load float, ptr %arrayidx5, align 4 174db800c26SBardia Mahjour %2 = mul nsw i64 %i.04, %n 175*7cf55817SMatt Arsenault %arrayidx6 = getelementptr inbounds float, ptr %a, i64 %2 176db800c26SBardia Mahjour %sub7 = add i64 %j.02, -1 177*7cf55817SMatt Arsenault %arrayidx8 = getelementptr inbounds float, ptr %arrayidx6, i64 %sub7 178*7cf55817SMatt Arsenault %3 = load float, ptr %arrayidx8, align 4 179db800c26SBardia Mahjour %add = fadd float %1, %3 180db800c26SBardia Mahjour %4 = mul nsw i64 %i.04, %n 181*7cf55817SMatt Arsenault %arrayidx10 = getelementptr inbounds float, ptr %a, i64 %4 182*7cf55817SMatt Arsenault %arrayidx11 = getelementptr inbounds float, ptr %arrayidx10, i64 %j.02 183*7cf55817SMatt Arsenault store float %add, ptr %arrayidx11, align 4 184db800c26SBardia Mahjour %inc = add i64 %j.02, 1 185db800c26SBardia Mahjour %cmp2 = icmp ult i64 %inc, %sub 186db800c26SBardia Mahjour br i1 %cmp2, label %for.body4, label %for.inc12 187db800c26SBardia Mahjour 188db800c26SBardia Mahjourfor.inc12: ; preds = %for.body4, %test1.for.cond1.preheader 189db800c26SBardia Mahjour %inc13 = add i64 %i.04, 1 190db800c26SBardia Mahjour %exitcond = icmp ne i64 %inc13, %n 191db800c26SBardia Mahjour br i1 %exitcond, label %test1.for.cond1.preheader, label %for.end14 192db800c26SBardia Mahjour 193db800c26SBardia Mahjourfor.end14: ; preds = %for.inc12, %entry 194db800c26SBardia Mahjour ret void 195db800c26SBardia Mahjour} 196db800c26SBardia Mahjour 197db800c26SBardia Mahjour 198db800c26SBardia Mahjour 199db800c26SBardia Mahjour; CHECK-LABEL: 'DDG' for loop 'test2.for.cond1.preheader': 2002dd82a1cSBardia Mahjour 2012dd82a1cSBardia Mahjour; CHECK: Node Address:[[PI1:0x[0-9a-f]*]]:pi-block 2022dd82a1cSBardia Mahjour; CHECK-NEXT:--- start of nodes in pi-block --- 20386acaa94SBardia Mahjour; CHECK: Node Address:[[N1:0x[0-9a-f]*]]:single-instruction 204db800c26SBardia Mahjour; CHECK-NEXT: Instructions: 2052dd82a1cSBardia Mahjour; CHECK-NEXT: %j.02 = phi i64 [ %inc, %for.body4 ], [ 1, %for.body4.preheader ] 206db800c26SBardia Mahjour; CHECK-NEXT: Edges: 2072dd82a1cSBardia Mahjour; CHECK-NEXT: [def-use] to [[N2:0x[0-9a-f]*]] 208db800c26SBardia Mahjour 20986acaa94SBardia Mahjour; CHECK: Node Address:[[N2]]:single-instruction 21086acaa94SBardia Mahjour; CHECK-NEXT: Instructions: 21186acaa94SBardia Mahjour; CHECK-NEXT: %inc = add i64 %j.02, 1 21286acaa94SBardia Mahjour; CHECK-NEXT: Edges: 21386acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N1]] 21486acaa94SBardia Mahjour; CHECK-NEXT:--- end of nodes in pi-block --- 21586acaa94SBardia Mahjour; CHECK-NEXT: Edges: 21686acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N3:0x[0-9a-f]*]] 21786acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N4:0x[0-9a-f]*]] 21886acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N5:0x[0-9a-f]*]] 21986acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N6:0x[0-9a-f]*]] 22086acaa94SBardia Mahjour 22186acaa94SBardia Mahjour; CHECK: Node Address:[[N4]]:single-instruction 222db800c26SBardia Mahjour; CHECK-NEXT: Instructions: 223db800c26SBardia Mahjour; CHECK-NEXT: %add7 = add i64 %j.02, 1 224db800c26SBardia Mahjour; CHECK-NEXT: Edges: 22586acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N7:0x[0-9a-f]*]] 226db800c26SBardia Mahjour 22786acaa94SBardia Mahjour; CHECK: Node Address:[[N8:0x[0-9a-f]*]]:pi-block 228f0af11d8Sbmahjour; CHECK-NEXT:--- start of nodes in pi-block --- 22986acaa94SBardia Mahjour; CHECK: Node Address:[[N9:0x[0-9a-f]*]]:single-instruction 230f0af11d8Sbmahjour; CHECK-NEXT: Instructions: 231f0af11d8Sbmahjour; CHECK-NEXT: %i.04 = phi i64 [ %inc13, %for.inc12 ], [ 0, %test2.for.cond1.preheader.preheader ] 232f0af11d8Sbmahjour; CHECK-NEXT: Edges: 2332dd82a1cSBardia Mahjour; CHECK-NEXT: [def-use] to [[N10:0x[0-9a-f]*]] 2342dd82a1cSBardia Mahjour 2352dd82a1cSBardia Mahjour; CHECK: Node Address:[[N10]]:single-instruction 2362dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 23786acaa94SBardia Mahjour; CHECK-NEXT: %inc13 = add i64 %i.04, 1 23886acaa94SBardia Mahjour; CHECK-NEXT: Edges: 23986acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N9]] 24086acaa94SBardia Mahjour; CHECK-NEXT:--- end of nodes in pi-block --- 2412dd82a1cSBardia Mahjour; CHECK-NEXT: Edges: 2422dd82a1cSBardia Mahjour; CHECK-NEXT: [def-use] to [[N11:0x[0-9a-f]*]] 24386acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N12:0x[0-9a-f]*]] 24486acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N13:0x[0-9a-f]*]] 2452dd82a1cSBardia Mahjour; CHECK-NEXT: [def-use] to [[N14:0x[0-9a-f]*]] 2462dd82a1cSBardia Mahjour 2470a2626d0SBardia Mahjour; CHECK: Node Address:[[N14]]:multi-instruction 2482dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 24986acaa94SBardia Mahjour; CHECK-NEXT: %exitcond = icmp ne i64 %inc13, %n 25086acaa94SBardia Mahjour; CHECK-NEXT: br i1 %exitcond, label %test2.for.cond1.preheader, label %for.end14.loopexit 25186acaa94SBardia Mahjour; CHECK-NEXT: Edges:none! 25286acaa94SBardia Mahjour 2530a2626d0SBardia Mahjour; CHECK: Node Address:[[N13]]:multi-instruction 25486acaa94SBardia Mahjour; CHECK-NEXT: Instructions: 25586acaa94SBardia Mahjour; CHECK-NEXT: %4 = mul nsw i64 %i.04, %n 256*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx10 = getelementptr inbounds float, ptr %a, i64 %4 25786acaa94SBardia Mahjour; CHECK-NEXT: Edges: 25886acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N5]] 2592dd82a1cSBardia Mahjour 2602dd82a1cSBardia Mahjour; CHECK: Node Address:[[N5]]:single-instruction 2612dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 262*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx11 = getelementptr inbounds float, ptr %arrayidx10, i64 %j.02 2632dd82a1cSBardia Mahjour; CHECK-NEXT: Edges: 26486acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N17:0x[0-9a-f]*]] 2652dd82a1cSBardia Mahjour 2660a2626d0SBardia Mahjour; CHECK: Node Address:[[N12]]:multi-instruction 2672dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 26886acaa94SBardia Mahjour; CHECK-NEXT: %2 = mul nsw i64 %i.04, %n 269*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx6 = getelementptr inbounds float, ptr %a, i64 %2 270f0af11d8Sbmahjour; CHECK-NEXT: Edges: 271f0af11d8Sbmahjour; CHECK-NEXT: [def-use] to [[N7]] 2722dd82a1cSBardia Mahjour 2730a2626d0SBardia Mahjour; CHECK: Node Address:[[N7]]:multi-instruction 2742dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 275*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx8 = getelementptr inbounds float, ptr %arrayidx6, i64 %add7 276*7cf55817SMatt Arsenault; CHECK-NEXT: %3 = load float, ptr %arrayidx8, align 4 27786acaa94SBardia Mahjour; CHECK-NEXT: Edges: 27886acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N20:0x[0-9a-f]*]] 27986acaa94SBardia Mahjour; CHECK-NEXT: [memory] to [[N17]] 28086acaa94SBardia Mahjour 2810a2626d0SBardia Mahjour; CHECK: Node Address:[[N11]]:multi-instruction 28286acaa94SBardia Mahjour; CHECK-NEXT: Instructions: 28386acaa94SBardia Mahjour; CHECK-NEXT: %0 = mul nsw i64 %i.04, %n 284*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx = getelementptr inbounds float, ptr %b, i64 %0 28586acaa94SBardia Mahjour; CHECK-NEXT: Edges: 28686acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N3]] 28786acaa94SBardia Mahjour 2880a2626d0SBardia Mahjour; CHECK: Node Address:[[N3]]:multi-instruction 28986acaa94SBardia Mahjour; CHECK-NEXT: Instructions: 290*7cf55817SMatt Arsenault; CHECK-NEXT: %arrayidx5 = getelementptr inbounds float, ptr %arrayidx, i64 %j.02 291*7cf55817SMatt Arsenault; CHECK-NEXT: %1 = load float, ptr %arrayidx5, align 4 2922dd82a1cSBardia Mahjour; CHECK-NEXT: Edges: 29386acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N20]] 2942dd82a1cSBardia Mahjour 29586acaa94SBardia Mahjour; CHECK: Node Address:[[N20]]:single-instruction 2962dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 2972dd82a1cSBardia Mahjour; CHECK-NEXT: %add = fadd float %1, %3 2982dd82a1cSBardia Mahjour; CHECK-NEXT: Edges: 29986acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N17]] 3002dd82a1cSBardia Mahjour 30186acaa94SBardia Mahjour; CHECK: Node Address:[[N17]]:single-instruction 3022dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 303*7cf55817SMatt Arsenault; CHECK-NEXT: store float %add, ptr %arrayidx11, align 4 3042dd82a1cSBardia Mahjour; CHECK-NEXT: Edges:none! 3052dd82a1cSBardia Mahjour 3062dd82a1cSBardia Mahjour; CHECK: Node Address:[[N23:0x[0-9a-f]*]]:single-instruction 3072dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 3082dd82a1cSBardia Mahjour; CHECK-NEXT: br label %for.inc12 3092dd82a1cSBardia Mahjour; CHECK-NEXT: Edges:none! 3102dd82a1cSBardia Mahjour 31186acaa94SBardia Mahjour; CHECK: Node Address:[[N24:0x[0-9a-f]*]]:single-instruction 3122dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 3132dd82a1cSBardia Mahjour; CHECK-NEXT: br label %for.body4 3142dd82a1cSBardia Mahjour; CHECK-NEXT: Edges:none! 3152dd82a1cSBardia Mahjour 31686acaa94SBardia Mahjour; CHECK: Node Address:[[N25:0x[0-9a-f]*]]:single-instruction 3172dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 3182dd82a1cSBardia Mahjour; CHECK-NEXT: %sub = add i64 %n, -1 3192dd82a1cSBardia Mahjour; CHECK-NEXT: Edges: 32086acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N6]] 32186acaa94SBardia Mahjour; CHECK-NEXT: [def-use] to [[N26:0x[0-9a-f]*]] 3222dd82a1cSBardia Mahjour 3230a2626d0SBardia Mahjour; CHECK: Node Address:[[N26]]:multi-instruction 3242dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 3252dd82a1cSBardia Mahjour; CHECK-NEXT: %cmp21 = icmp ult i64 1, %sub 3262dd82a1cSBardia Mahjour; CHECK-NEXT: br i1 %cmp21, label %for.body4.preheader, label %for.inc12 3272dd82a1cSBardia Mahjour; CHECK-NEXT: Edges:none! 3282dd82a1cSBardia Mahjour 3290a2626d0SBardia Mahjour; CHECK: Node Address:[[N6]]:multi-instruction 3302dd82a1cSBardia Mahjour; CHECK-NEXT: Instructions: 3312dd82a1cSBardia Mahjour; CHECK-NEXT: %cmp2 = icmp ult i64 %inc, %sub 3322dd82a1cSBardia Mahjour; CHECK-NEXT: br i1 %cmp2, label %for.body4, label %for.inc12.loopexit 3332dd82a1cSBardia Mahjour; CHECK-NEXT: Edges:none! 334f0af11d8Sbmahjour 335f0af11d8Sbmahjour 336db800c26SBardia Mahjour;; This test has no cycles. 337db800c26SBardia Mahjour;; void test2(unsigned long n, float a[][n], float b[][n]) { 338db800c26SBardia Mahjour;; for (unsigned long i = 0; i < n; i++) 339db800c26SBardia Mahjour;; for (unsigned long j = 1; j < n-1; j++) 340db800c26SBardia Mahjour;; a[i][j] = b[i][j] + a[i][j+1]; 341db800c26SBardia Mahjour;; } 342db800c26SBardia Mahjour 343*7cf55817SMatt Arsenaultdefine void @test2(i64 %n, ptr noalias %a, ptr noalias %b) { 344db800c26SBardia Mahjourentry: 345db800c26SBardia Mahjour %exitcond3 = icmp ne i64 0, %n 346db800c26SBardia Mahjour br i1 %exitcond3, label %test2.for.cond1.preheader, label %for.end14 347db800c26SBardia Mahjour 348db800c26SBardia Mahjourtest2.for.cond1.preheader: ; preds = %entry, %for.inc12 349db800c26SBardia Mahjour %i.04 = phi i64 [ %inc13, %for.inc12 ], [ 0, %entry ] 350db800c26SBardia Mahjour %sub = add i64 %n, -1 351db800c26SBardia Mahjour %cmp21 = icmp ult i64 1, %sub 352db800c26SBardia Mahjour br i1 %cmp21, label %for.body4, label %for.inc12 353db800c26SBardia Mahjour 354db800c26SBardia Mahjourfor.body4: ; preds = %test2.for.cond1.preheader, %for.body4 355db800c26SBardia Mahjour %j.02 = phi i64 [ %inc, %for.body4 ], [ 1, %test2.for.cond1.preheader ] 356db800c26SBardia Mahjour %0 = mul nsw i64 %i.04, %n 357*7cf55817SMatt Arsenault %arrayidx = getelementptr inbounds float, ptr %b, i64 %0 358*7cf55817SMatt Arsenault %arrayidx5 = getelementptr inbounds float, ptr %arrayidx, i64 %j.02 359*7cf55817SMatt Arsenault %1 = load float, ptr %arrayidx5, align 4 360db800c26SBardia Mahjour %2 = mul nsw i64 %i.04, %n 361*7cf55817SMatt Arsenault %arrayidx6 = getelementptr inbounds float, ptr %a, i64 %2 362db800c26SBardia Mahjour %add7 = add i64 %j.02, 1 363*7cf55817SMatt Arsenault %arrayidx8 = getelementptr inbounds float, ptr %arrayidx6, i64 %add7 364*7cf55817SMatt Arsenault %3 = load float, ptr %arrayidx8, align 4 365db800c26SBardia Mahjour %add = fadd float %1, %3 366db800c26SBardia Mahjour %4 = mul nsw i64 %i.04, %n 367*7cf55817SMatt Arsenault %arrayidx10 = getelementptr inbounds float, ptr %a, i64 %4 368*7cf55817SMatt Arsenault %arrayidx11 = getelementptr inbounds float, ptr %arrayidx10, i64 %j.02 369*7cf55817SMatt Arsenault store float %add, ptr %arrayidx11, align 4 370db800c26SBardia Mahjour %inc = add i64 %j.02, 1 371db800c26SBardia Mahjour %cmp2 = icmp ult i64 %inc, %sub 372db800c26SBardia Mahjour br i1 %cmp2, label %for.body4, label %for.inc12 373db800c26SBardia Mahjour 374db800c26SBardia Mahjourfor.inc12: ; preds = %for.body4, %test2.for.cond1.preheader 375db800c26SBardia Mahjour %inc13 = add i64 %i.04, 1 376db800c26SBardia Mahjour %exitcond = icmp ne i64 %inc13, %n 377db800c26SBardia Mahjour br i1 %exitcond, label %test2.for.cond1.preheader, label %for.end14 378db800c26SBardia Mahjour 379db800c26SBardia Mahjourfor.end14: ; preds = %for.inc12, %entry 380db800c26SBardia Mahjour ret void 381db800c26SBardia Mahjour}