blob: fa81571823583f211094a6f96e381770003f823c [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt < %s -passes=loop-interchange -cache-line-size=64 -S | FileCheck %s
define void @pr48212(ptr %filter) {
; CHECK-LABEL: define void @pr48212(
; CHECK-SAME: ptr [[FILTER:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: br label %[[L2:.*]]
; CHECK: [[L1:.*]]:
; CHECK-NEXT: br label %[[FOR_BODY:.*]]
; CHECK: [[FOR_BODY]]:
; CHECK-NEXT: [[K1_03:%.*]] = phi i32 [ 0, %[[L1]] ], [ [[INC7:%.*]], %[[FOR_INC6:.*]] ]
; CHECK-NEXT: [[TEMP_12:%.*]] = phi i32 [ [[TEMP_04:%.*]], %[[L1]] ], [ [[ADD:%.*]], %[[FOR_INC6]] ]
; CHECK-NEXT: br label %[[FOR_BODY3_SPLIT:.*]]
; CHECK: [[L2]]:
; CHECK-NEXT: br label %[[FOR_BODY3:.*]]
; CHECK: [[FOR_BODY3]]:
; CHECK-NEXT: [[K2_01:%.*]] = phi i32 [ 0, %[[L2]] ], [ [[TMP1:%.*]], %[[FOR_INC_SPLIT:.*]] ]
; CHECK-NEXT: [[TEMP_04]] = phi i32 [ undef, %[[L2]] ], [ [[TEMP_1_LCSSA:%.*]], %[[FOR_INC_SPLIT]] ]
; CHECK-NEXT: br label %[[L1]]
; CHECK: [[FOR_BODY3_SPLIT]]:
; CHECK-NEXT: [[IDXPROM:%.*]] = sext i32 [[K2_01]] to i64
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [5 x i32], ptr [[FILTER]], i64 [[IDXPROM]]
; CHECK-NEXT: [[IDXPROM4:%.*]] = sext i32 [[K1_03]] to i64
; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds [5 x i32], ptr [[ARRAYIDX]], i64 0, i64 [[IDXPROM4]]
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX5]], align 4
; CHECK-NEXT: [[ADD]] = add i32 [[TEMP_12]], [[TMP0]]
; CHECK-NEXT: br label %[[FOR_INC:.*]]
; CHECK: [[FOR_INC]]:
; CHECK-NEXT: [[INC:%.*]] = add nsw i32 [[K2_01]], 1
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[INC]], 3
; CHECK-NEXT: br label %[[FOR_END:.*]]
; CHECK: [[FOR_INC_SPLIT]]:
; CHECK-NEXT: [[TEMP_1_LCSSA]] = phi i32 [ [[ADD]], %[[FOR_INC6]] ]
; CHECK-NEXT: [[TMP1]] = add nsw i32 [[K2_01]], 1
; CHECK-NEXT: [[TMP2:%.*]] = icmp slt i32 [[TMP1]], 3
; CHECK-NEXT: br i1 [[TMP2]], label %[[FOR_BODY3]], label %[[FOR_END8:.*]]
; CHECK: [[FOR_END]]:
; CHECK-NEXT: br label %[[FOR_INC6]]
; CHECK: [[FOR_INC6]]:
; CHECK-NEXT: [[INC7]] = add nsw i32 [[K1_03]], 1
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[INC7]], 5
; CHECK-NEXT: br i1 [[CMP]], label %[[FOR_BODY]], label %[[FOR_INC_SPLIT]]
; CHECK: [[FOR_END8]]:
; CHECK-NEXT: ret void
;
entry:
br label %L1
L1: ; preds = %entry
br label %for.body
for.body: ; preds = %L1, %for.inc6
%temp.04 = phi i32 [ undef, %L1 ], [ %temp.1.lcssa, %for.inc6 ]
%k1.03 = phi i32 [ 0, %L1 ], [ %inc7, %for.inc6 ]
br label %L2
L2: ; preds = %for.body
br label %for.body3
for.body3: ; preds = %L2, %for.inc
%temp.12 = phi i32 [ %temp.04, %L2 ], [ %add, %for.inc ]
%k2.01 = phi i32 [ 0, %L2 ], [ %inc, %for.inc ]
%idxprom = sext i32 %k2.01 to i64
%arrayidx = getelementptr inbounds [5 x i32], ptr %filter, i64 %idxprom
%idxprom4 = sext i32 %k1.03 to i64
%arrayidx5 = getelementptr inbounds [5 x i32], ptr %arrayidx, i64 0, i64 %idxprom4
%0 = load i32, ptr %arrayidx5
%add = add nsw i32 %temp.12, %0
br label %for.inc
for.inc: ; preds = %for.body3
%inc = add nsw i32 %k2.01, 1
%cmp2 = icmp slt i32 %inc, 3
br i1 %cmp2, label %for.body3, label %for.end
for.end: ; preds = %for.inc
%temp.1.lcssa = phi i32 [ %add, %for.inc ]
br label %for.inc6
for.inc6: ; preds = %for.end
%inc7 = add nsw i32 %k1.03, 1
%cmp = icmp slt i32 %inc7, 5
br i1 %cmp, label %for.body, label %for.end8
for.end8: ; preds = %for.inc6
ret void
}