129 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py2; RUN: opt -passes=loop-distribute -enable-loop-distribute \3; RUN: -debug-only=loop-distribute -disable-output 2>&1 %s | FileCheck %s4 5define void @ldist(i1 %cond, ptr %A, ptr %B, ptr %C) {6; CHECK-LABEL: 'ldist'7; CHECK-NEXT: LDist: Found a candidate loop: for.body8; CHECK-NEXT: LDist: Backward dependences:9; CHECK-NEXT: Unknown:10; CHECK-NEXT: %lv3 = load i16, ptr %c.sink, align 2 ->11; CHECK-NEXT: store i16 %add, ptr %c.sink, align 112; CHECK-NEXT: Unknown:13; CHECK-NEXT: %lv3 = load i16, ptr %c.sink, align 2 ->14; CHECK-NEXT: store i16 %add, ptr %c.sink, align 115; CHECK-NEXT: LDist: Seeded partitions:16; CHECK-NEXT: LDist: Partition 0:17; CHECK-NEXT: for.body: %lv = load i16, ptr %A, align 118; CHECK-NEXT: LDist: Partition 1:19; CHECK-NEXT: for.body: store i16 %lv, ptr %A, align 120; CHECK-NEXT: LDist: Partition 2:21; CHECK-NEXT: if.then: %lv2 = load i16, ptr %A, align 122; CHECK-NEXT: LDist: Partition 3: (cycle)23; CHECK-NEXT: if.end: %lv3 = load i16, ptr %c.sink, align 224; CHECK-NEXT: if.end: store i16 %add, ptr %c.sink, align 125; CHECK-NEXT: LDist: Merged partitions:26; CHECK-NEXT: LDist: Partition 0:27; CHECK-NEXT: for.body: %lv = load i16, ptr %A, align 128; CHECK-NEXT: for.body: store i16 %lv, ptr %A, align 129; CHECK-NEXT: if.then: %lv2 = load i16, ptr %A, align 130; CHECK-NEXT: LDist: Partition 1: (cycle)31; CHECK-NEXT: if.end: %lv3 = load i16, ptr %c.sink, align 232; CHECK-NEXT: if.end: store i16 %add, ptr %c.sink, align 133; CHECK-NEXT: LDist: Populated partitions:34; CHECK-NEXT: LDist: Partition 0:35; CHECK-NEXT: for.body: %lv = load i16, ptr %A, align 136; CHECK-NEXT: for.body: store i16 %lv, ptr %A, align 137; CHECK-NEXT: if.then: %lv2 = load i16, ptr %A, align 138; CHECK-NEXT: for.body: br i1 %cond, label %if.then, label %if.end39; CHECK-NEXT: if.then: br label %if.end40; CHECK-NEXT: if.end: br i1 %tobool.not, label %for.end.loopexit, label %for.body41; CHECK-NEXT: if.end: %tobool.not = icmp eq i16 %iv.next, 100042; CHECK-NEXT: if.end: %iv.next = add nuw nsw i16 %iv, 143; CHECK-NEXT: for.body: %iv = phi i16 [ 0, %entry ], [ %iv.next, %if.end ]44; CHECK-NEXT: LDist: Partition 1: (cycle)45; CHECK-NEXT: if.end: %lv3 = load i16, ptr %c.sink, align 246; CHECK-NEXT: if.end: store i16 %add, ptr %c.sink, align 147; CHECK-NEXT: for.body: br i1 %cond, label %if.then, label %if.end48; CHECK-NEXT: if.then: br label %if.end49; CHECK-NEXT: if.end: br i1 %tobool.not, label %for.end.loopexit, label %for.body50; CHECK-NEXT: if.end: %tobool.not = icmp eq i16 %iv.next, 100051; CHECK-NEXT: if.end: %iv.next = add nuw nsw i16 %iv, 152; CHECK-NEXT: for.body: %iv = phi i16 [ 0, %entry ], [ %iv.next, %if.end ]53; CHECK-NEXT: if.end: %add = add i16 %lv3, 1054; CHECK-NEXT: if.end: %c.sink = phi ptr [ %B, %if.then ], [ %C, %for.body ]55; CHECK-NEXT: LDist: Distributing loop: for.body56; CHECK-NEXT: LDist: Pointers:57; CHECK-NEXT: Check 0:58; CHECK-NEXT: Comparing group GRP0:59; CHECK-NEXT: ptr %A60; CHECK-NEXT: ptr %A61; CHECK-NEXT: Against group GRP1:62; CHECK-NEXT: ptr %C63; CHECK-NEXT: ptr %C64; CHECK-NEXT: Check 1:65; CHECK-NEXT: Comparing group GRP0:66; CHECK-NEXT: ptr %A67; CHECK-NEXT: ptr %A68; CHECK-NEXT: Against group GRP2:69; CHECK-NEXT: ptr %B70; CHECK-NEXT: ptr %B71; CHECK-NEXT: LDist: After removing unused Instrs:72; CHECK-NEXT: LDist: Partition 0:73; CHECK-NEXT: for.body.ldist1: ; preds = %if.end.ldist1, %for.body.ph.ldist174; CHECK-NEXT: %iv.ldist1 = phi i16 [ 0, %for.body.ph.ldist1 ], [ %iv.next.ldist1, %if.end.ldist1 ]75; CHECK-NEXT: %lv.ldist1 = load i16, ptr %A, align 1, !alias.scope !2, !noalias !576; CHECK-NEXT: store i16 %lv.ldist1, ptr %A, align 1, !alias.scope !2, !noalias !577; CHECK-NEXT: br i1 %cond, label %if.then.ldist1, label %if.end.ldist178; CHECK-EMPTY:79; CHECK-NEXT: if.then.ldist1: ; preds = %for.body.ldist180; CHECK-NEXT: %lv2.ldist1 = load i16, ptr %A, align 1, !alias.scope !2, !noalias !581; CHECK-NEXT: br label %if.end.ldist182; CHECK-EMPTY:83; CHECK-NEXT: if.end.ldist1: ; preds = %if.then.ldist1, %for.body.ldist184; CHECK-NEXT: %iv.next.ldist1 = add nuw nsw i16 %iv.ldist1, 185; CHECK-NEXT: %tobool.not.ldist1 = icmp eq i16 %iv.next.ldist1, 100086; CHECK-NEXT: br i1 %tobool.not.ldist1, label %for.body.ph, label %for.body.ldist187; CHECK-NEXT: LDist: Partition 1:88; CHECK-NEXT: for.body: ; preds = %if.end, %for.body.ph89; CHECK-NEXT: %iv = phi i16 [ 0, %for.body.ph ], [ %iv.next, %if.end ]90; CHECK-NEXT: br i1 %cond, label %if.then, label %if.end91; CHECK-EMPTY:92; CHECK-NEXT: if.then: ; preds = %for.body93; CHECK-NEXT: br label %if.end94; CHECK-EMPTY:95; CHECK-NEXT: if.end: ; preds = %if.then, %for.body96; CHECK-NEXT: %c.sink = phi ptr [ %B, %if.then ], [ %C, %for.body ]97; CHECK-NEXT: %lv3 = load i16, ptr %c.sink, align 298; CHECK-NEXT: %add = add i16 %lv3, 1099; CHECK-NEXT: store i16 %add, ptr %c.sink, align 1100; CHECK-NEXT: %iv.next = add nuw nsw i16 %iv, 1101; CHECK-NEXT: %tobool.not = icmp eq i16 %iv.next, 1000102; CHECK-NEXT: br i1 %tobool.not, label %for.end.loopexit.loopexit6, label %for.body103;104entry:105 br label %for.body106 107for.body: ; preds = %if.end, %entry108 %iv = phi i16 [ 0, %entry ], [ %iv.next, %if.end ]109 %lv = load i16, ptr %A, align 1110 store i16 %lv, ptr %A, align 1111 br i1 %cond, label %if.then, label %if.end112 113if.then: ; preds = %for.body114 %lv2 = load i16, ptr %A, align 1115 br label %if.end116 117if.end: ; preds = %if.then, %for.body118 %c.sink = phi ptr [ %B, %if.then ], [ %C, %for.body ]119 %lv3 = load i16, ptr %c.sink120 %add = add i16 %lv3, 10121 store i16 %add, ptr %c.sink, align 1122 %iv.next = add nuw nsw i16 %iv, 1123 %tobool.not = icmp eq i16 %iv.next, 1000124 br i1 %tobool.not, label %for.end.loopexit, label %for.body125 126for.end.loopexit: ; preds = %if.end127 ret void128}129