96 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=loop-interchange -cache-line-size=64 -pass-remarks-missed='loop-interchange' -pass-remarks-output=%t -S3; RUN: FileCheck --input-file=%t %s4 5@b = external dso_local global [5 x i32], align 166 7;; Not profitable to interchange, because the access is invariant to j loop.8;;9;; for(int i=0;i<4;i++) {10;; for(int j=1;j<4;j++) {11;; b[i] = ....12;; }13;; }14 15; CHECK: --- !Missed16; CHECK-NEXT: Pass: loop-interchange17; CHECK-NEXT: Name: Dependence18; CHECK-NEXT: Function: test119; CHECK-NEXT: Args:20; CHECK-NEXT: - String: Cannot interchange loops due to dependences.21 22define void @test1() {23entry:24 br label %outer.header25 26outer.header:27 %i = phi i32 [ %i.next, %outer.latch ], [ 0, %entry ]28 br label %inner.header29 30inner.header:31 %j = phi i32 [ %j.next, %inner.latch ], [ 1, %outer.header ]32 br label %inner.latch33 34inner.latch:35 %idxprom = sext i32 %i to i6436 %arrayidx = getelementptr inbounds [5 x i32], ptr @b, i64 0, i64 %idxprom37 %0 = load i32, ptr %arrayidx, align 438 store i32 undef, ptr %arrayidx, align 439 %cmp = icmp slt i32 %j, 440 %j.next = add nuw nsw i32 %j, 141 br i1 %cmp, label %inner.header, label %outer.body42 43outer.body:44 br label %outer.latch45 46outer.latch:47 %i.next = add nsw i32 %i, 148 %cmp2 = icmp slt i32 %i, 449 br i1 %cmp2, label %outer.header, label %exit50 51exit:52 ret void53}54 55 56; CHECK: --- !Missed57; CHECK-NEXT: Pass: loop-interchange58; CHECK-NEXT: Name: Dependence59; CHECK-NEXT: Function: test260; CHECK-NEXT: Args:61; CHECK-NEXT: - String: Cannot interchange loops due to dependences.62 63define void @test2() {64entry:65 br label %outer.header66 67outer.header:68 %i = phi i32 [ %i.next, %outer.latch ], [ 0, %entry ]69 br label %inner.header70 71inner.header:72 %lsr.iv = phi i32 [ %lsr.iv.next, %inner.latch ], [ 1, %outer.header ]73 br label %inner.latch74 75inner.latch:76 %idxprom = sext i32 %i to i6477 %arrayidx = getelementptr inbounds [5 x i32], ptr @b, i64 0, i64 %idxprom78 %0 = load i32, ptr %arrayidx, align 479 %cmp = icmp slt i32 %lsr.iv, 480 %cmp.zext = zext i1 %cmp to i3281 store i32 %cmp.zext, ptr %arrayidx, align 482 %lsr.iv.next = add nuw nsw i32 %lsr.iv, 183 br i1 %cmp, label %inner.header, label %outer.body84 85outer.body:86 br label %outer.latch87 88outer.latch:89 %i.next = add nsw i32 %i, 190 %cmp2 = icmp slt i32 %i, 491 br i1 %cmp2, label %outer.header, label %exit92 93exit:94 ret void95}96