46 lines · plain
1; RUN: opt < %s -passes=loop-interchange -pass-remarks-output=%t \2; RUN: -disable-output3; RUN: FileCheck -input-file %t %s4 5;; In the following case, p0 and p1 may alias, so the direction vector must be [* *].6;;7;; void may_alias(float *p0, float *p1) {8;; for (int i = 0; i < 4; i++)9;; for (int j = 0; j < 4; j++)10;; p0[4 * i + j] = p1[4 * j + i];11;; }12 13; CHECK: --- !Missed14; CHECK-NEXT: Pass: loop-interchange15; CHECK-NEXT: Name: Dependence16; CHECK-NEXT: Function: may_alias17; CHECK-NEXT: Args:18; CHECK-NEXT: - String: All loops have dependencies in all directions.19; CHECK-NEXT: ...20define void @may_alias(ptr %p0, ptr %p1) {21entry:22 br label %for.i.header23 24for.i.header:25 %i = phi i32 [ 0, %entry ], [ %i.inc, %for.i.latch ]26 br label %for.j27 28for.j:29 %j = phi i32 [ 0, %for.i.header ], [ %j.inc, %for.j ]30 %idx.0 = getelementptr inbounds [4 x [4 x float]], ptr %p0, i32 0, i32 %j, i32 %i31 %idx.1 = getelementptr inbounds [4 x [4 x float]], ptr %p1, i32 0, i32 %i, i32 %j32 %0 = load float, ptr %idx.0, align 433 store float %0, ptr %idx.1, align 434 %j.inc = add nuw nsw i32 %j, 135 %cmp.j = icmp slt i32 %j.inc, 436 br i1 %cmp.j, label %for.j, label %for.i.latch37 38for.i.latch:39 %i.inc = add nuw nsw i32 %i, 140 %cmp.i = icmp slt i32 %i.inc, 441 br i1 %cmp.i, label %for.i.header, label %exit42 43exit:44 ret void45}46