44 lines
1.4 KiB
LLVM
44 lines
1.4 KiB
LLVM
; RUN: opt < %s -passes=loop-interchange -pass-remarks-output=%t -disable-output -loop-interchange-profitabilities=ignore -S
|
|
; RUN: FileCheck --input-file=%t %s
|
|
|
|
; There should be no reason to interchange this, unless it is forced.
|
|
;
|
|
; for (int i = 0; i<1024; i++)
|
|
; for (int j = 0; j<1024; j++)
|
|
; A[i][j] = 42;
|
|
;
|
|
; CHECK: --- !Passed
|
|
; CHECK-NEXT: Pass: loop-interchange
|
|
; CHECK-NEXT: Name: Interchanged
|
|
; CHECK-NEXT: Function: f
|
|
; CHECK-NEXT: Args:
|
|
; CHECK-NEXT: - String: Loop interchanged with enclosing loop.
|
|
; CHECK-NEXT: ...
|
|
|
|
@A = dso_local local_unnamed_addr global [1024 x [1024 x i32]] zeroinitializer, align 4
|
|
|
|
define dso_local void @f() local_unnamed_addr #0 {
|
|
entry:
|
|
br label %outer.header
|
|
|
|
outer.header:
|
|
%i = phi i64 [ 0, %entry ], [ %i.next, %inner.header ]
|
|
br label %inner.body
|
|
|
|
inner.header:
|
|
%i.next = add nuw nsw i64 %i, 1
|
|
%exitcond20.not = icmp eq i64 %i.next, 1024
|
|
br i1 %exitcond20.not, label %exit, label %outer.header
|
|
|
|
inner.body:
|
|
%j = phi i64 [ 0, %outer.header ], [ %j.next, %inner.body ]
|
|
%arrayidx6 = getelementptr inbounds nuw [1024 x [1024 x i32]], ptr @A, i64 0, i64 %i, i64 %j
|
|
store i32 42, ptr %arrayidx6, align 4
|
|
%j.next = add nuw nsw i64 %j, 1
|
|
%exitcond.not = icmp eq i64 %j.next, 1024
|
|
br i1 %exitcond.not, label %inner.header, label %inner.body
|
|
|
|
exit:
|
|
ret void
|
|
}
|