CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
278 lines
14 KiB
LLVM
278 lines
14 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
|
|
; RUN: opt < %s -passes=loop-interchange -loop-interchange-profitabilities=cache -loop-interchange-threshold=-100 -verify-dom-info -verify-loop-info -verify-scev -verify-loop-lcssa -S | FileCheck %s
|
|
|
|
; Make sure the loops are in LCSSA form after loop interchange,
|
|
; and loop interchange does not hit assertion errors and crash.
|
|
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
@b = external global [512 x [4 x i32]], align 1
|
|
@c = external global [2 x [4 x i32]], align 1
|
|
@d = external global [1024 x [512 x [4 x i32]]], align 1
|
|
|
|
define void @test1() {
|
|
; CHECK-LABEL: define void @test1() {
|
|
; CHECK-NEXT: [[FOR_COND33_PREHEADER:.*:]]
|
|
; CHECK-NEXT: br label %[[FOR_BODY42_SPLIT1:.*]]
|
|
; CHECK: [[FOR_COND33_PREHEADER_PREHEADER:.*]]:
|
|
; CHECK-NEXT: br label %[[FOR_BODY42:.*]]
|
|
; CHECK: [[FOR_BODY42]]:
|
|
; CHECK-NEXT: [[I_011:%.*]] = phi i16 [ [[INC69:%.*]], %[[FOR_END68:.*]] ], [ 0, %[[FOR_COND33_PREHEADER_PREHEADER]] ]
|
|
; CHECK-NEXT: br label %[[FOR_COND37_PREHEADER:.*]]
|
|
; CHECK: [[FOR_BODY42_SPLIT1]]:
|
|
; CHECK-NEXT: br label %[[FOR_BODY42_PREHEADER:.*]]
|
|
; CHECK: [[FOR_BODY42_PREHEADER]]:
|
|
; CHECK-NEXT: [[J_010:%.*]] = phi i16 [ [[TMP3:%.*]], %[[FOR_END67:.*]] ], [ 0, %[[FOR_BODY42_SPLIT1]] ]
|
|
; CHECK-NEXT: br label %[[FOR_COND33_PREHEADER_PREHEADER]]
|
|
; CHECK: [[FOR_COND37_PREHEADER]]:
|
|
; CHECK-NEXT: [[K_09:%.*]] = phi i16 [ -512, %[[FOR_BODY42]] ], [ [[TMP1:%.*]], %[[FOR_COND37_PREHEADER]] ]
|
|
; CHECK-NEXT: [[SUB51:%.*]] = add nsw i16 [[K_09]], 512
|
|
; CHECK-NEXT: [[ARRAYIDX55:%.*]] = getelementptr inbounds [512 x [4 x i32]], ptr @b, i16 0, i16 [[SUB51]], i16 [[J_010]]
|
|
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX55]], align 1
|
|
; CHECK-NEXT: [[ADD61:%.*]] = add i32 undef, undef
|
|
; CHECK-NEXT: [[TMP1]] = add nsw i16 [[K_09]], 1
|
|
; CHECK-NEXT: [[TMP2:%.*]] = icmp slt i16 [[K_09]], 42
|
|
; CHECK-NEXT: br i1 [[TMP2]], label %[[FOR_COND37_PREHEADER]], label %[[FOR_END64:.*]]
|
|
; CHECK: [[FOR_END64]]:
|
|
; CHECK-NEXT: [[ADD61_LCSSA_LCSSA:%.*]] = phi i32 [ [[ADD61]], %[[FOR_COND37_PREHEADER]] ]
|
|
; CHECK-NEXT: store i32 [[ADD61_LCSSA_LCSSA]], ptr undef, align 1
|
|
; CHECK-NEXT: [[INC66:%.*]] = add nuw nsw i16 [[J_010]], 1
|
|
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i16 [[J_010]], 43
|
|
; CHECK-NEXT: br label %[[FOR_END68]]
|
|
; CHECK: [[FOR_END67]]:
|
|
; CHECK-NEXT: [[TMP3]] = add nuw nsw i16 [[J_010]], 1
|
|
; CHECK-NEXT: [[TMP4:%.*]] = icmp slt i16 [[J_010]], 43
|
|
; CHECK-NEXT: br i1 [[TMP4]], label %[[FOR_BODY42_PREHEADER]], label %[[FOR_COND75_PREHEADER:.*]]
|
|
; CHECK: [[FOR_END68]]:
|
|
; CHECK-NEXT: [[INC69]] = add nuw nsw i16 [[I_011]], 1
|
|
; CHECK-NEXT: [[EXITCOND13_NOT:%.*]] = icmp eq i16 [[INC69]], 2
|
|
; CHECK-NEXT: br i1 [[EXITCOND13_NOT]], label %[[FOR_END67]], label %[[FOR_BODY42]]
|
|
; CHECK: [[FOR_COND75_PREHEADER]]:
|
|
; CHECK-NEXT: br label %[[FOR_COND75:.*]]
|
|
; CHECK: [[FOR_COND75]]:
|
|
; CHECK-NEXT: br label %[[FOR_COND75]]
|
|
;
|
|
entry:
|
|
br label %for.cond33.preheader
|
|
|
|
for.cond33.preheader: ; preds = %for.end67, %entry
|
|
%i.011 = phi i16 [ 0, %entry ], [ %inc69, %for.end67 ]
|
|
br label %for.cond37.preheader
|
|
|
|
for.cond37.preheader: ; preds = %for.end64, %for.cond33.preheader
|
|
%j.010 = phi i16 [ 0, %for.cond33.preheader ], [ %inc66, %for.end64 ]
|
|
br label %for.body42
|
|
|
|
for.body42: ; preds = %for.body42, %for.cond37.preheader
|
|
%k.09 = phi i16 [ -512, %for.cond37.preheader ], [ %inc63, %for.body42 ]
|
|
%sub51 = add nsw i16 %k.09, 512
|
|
%arrayidx55 = getelementptr inbounds [512 x [4 x i32]], ptr @b, i16 0, i16 %sub51, i16 %j.010
|
|
%0 = load i32, ptr %arrayidx55, align 1
|
|
%add61 = add i32 undef, undef
|
|
%inc63 = add nsw i16 %k.09, 1
|
|
%cmp = icmp slt i16 %k.09, 42
|
|
br i1 %cmp, label %for.body42, label %for.end64
|
|
|
|
for.end64: ; preds = %for.body42
|
|
store i32 %add61, ptr undef, align 1
|
|
%inc66 = add nuw nsw i16 %j.010, 1
|
|
%cmp2 = icmp slt i16 %j.010, 43
|
|
br i1 %cmp2, label %for.cond37.preheader, label %for.end67
|
|
|
|
for.end67: ; preds = %for.end64
|
|
%inc69 = add nuw nsw i16 %i.011, 1
|
|
%exitcond13.not = icmp eq i16 %inc69, 2
|
|
br i1 %exitcond13.not, label %for.cond75, label %for.cond33.preheader
|
|
|
|
for.cond75: ; preds = %for.cond75, %for.end67
|
|
br label %for.cond75
|
|
}
|
|
|
|
; Make sure that we split the phi nodes in the middle loop header
|
|
; into a separate basic block to avoid the situation where use of
|
|
; the outermost indvar appears before its def after interchanging
|
|
; the outermost and the middle loop. Otherwise loop interchange
|
|
; would crash.
|
|
|
|
define void @test2() {
|
|
; CHECK-LABEL: define void @test2() {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: br label %[[FOR_COND33_PREHEADER:.*]]
|
|
; CHECK: [[FOR_COND33_PREHEADER_PREHEADER:.*]]:
|
|
; CHECK-NEXT: br label %[[FOR_COND33_PREHEADER1:.*]]
|
|
; CHECK: [[FOR_COND33_PREHEADER1]]:
|
|
; CHECK-NEXT: [[I_166:%.*]] = phi i16 [ [[INC69:%.*]], %[[FOR_INC69:.*]] ], [ 0, %[[FOR_COND33_PREHEADER_PREHEADER]] ]
|
|
; CHECK-NEXT: [[ARRAYIDX60:%.*]] = getelementptr inbounds [2 x [4 x i32]], ptr @c, i16 0, i16 [[I_166]], i16 [[J_165:%.*]]
|
|
; CHECK-NEXT: br label %[[VECTOR_BODY85_SPLIT1:.*]]
|
|
; CHECK: [[FOR_COND33_PREHEADER]]:
|
|
; CHECK-NEXT: br label %[[FOR_COND37_PREHEADER:.*]]
|
|
; CHECK: [[FOR_COND37_PREHEADER]]:
|
|
; CHECK-NEXT: [[J_165]] = phi i16 [ [[TMP7:%.*]], %[[MIDDLE_BLOCK80:.*]] ], [ 0, %[[FOR_COND33_PREHEADER]] ]
|
|
; CHECK-NEXT: br label %[[VECTOR_BODY85:.*]]
|
|
; CHECK: [[VECTOR_BODY85]]:
|
|
; CHECK-NEXT: br label %[[VECTOR_BODY86:.*]]
|
|
; CHECK: [[VECTOR_BODY86]]:
|
|
; CHECK-NEXT: [[INDEX86:%.*]] = phi i16 [ 0, %[[VECTOR_BODY85]] ], [ [[TMP5:%.*]], %[[VECTOR_BODY85_SPLIT:.*]] ]
|
|
; CHECK-NEXT: br label %[[FOR_COND33_PREHEADER_PREHEADER]]
|
|
; CHECK: [[VECTOR_BODY85_SPLIT1]]:
|
|
; CHECK-NEXT: [[TMP0:%.*]] = or disjoint i16 [[INDEX86]], 2
|
|
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds [512 x [4 x i32]], ptr @b, i16 0, i16 [[TMP0]], i16 [[J_165]]
|
|
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr [[TMP1]], align 1
|
|
; CHECK-NEXT: [[TMP3:%.*]] = add nuw i16 [[INDEX86]], 4
|
|
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i16 [[INDEX86]], 42
|
|
; CHECK-NEXT: br label %[[FOR_INC68:.*]]
|
|
; CHECK: [[VECTOR_BODY85_SPLIT]]:
|
|
; CHECK-NEXT: [[TMP5]] = add nuw i16 [[INDEX86]], 4
|
|
; CHECK-NEXT: [[TMP4:%.*]] = icmp slt i16 [[INDEX86]], 42
|
|
; CHECK-NEXT: br i1 [[TMP4]], label %[[VECTOR_BODY86]], label %[[MIDDLE_BLOCK80]]
|
|
; CHECK: [[FOR_INC68]]:
|
|
; CHECK-NEXT: [[INC66:%.*]] = add nuw nsw i16 [[J_165]], 1
|
|
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i16 [[INC66]], 42
|
|
; CHECK-NEXT: br label %[[FOR_INC69]]
|
|
; CHECK: [[MIDDLE_BLOCK80]]:
|
|
; CHECK-NEXT: [[TMP7]] = add nuw nsw i16 [[J_165]], 1
|
|
; CHECK-NEXT: [[TMP6:%.*]] = icmp slt i16 [[TMP7]], 42
|
|
; CHECK-NEXT: br i1 [[TMP6]], label %[[FOR_COND37_PREHEADER]], label %[[FOR_COND75_PREHEADER:.*]]
|
|
; CHECK: [[FOR_INC69]]:
|
|
; CHECK-NEXT: [[INC69]] = add nuw nsw i16 [[I_166]], 1
|
|
; CHECK-NEXT: [[EXITCOND77_NOT:%.*]] = icmp slt i16 [[INC69]], 24
|
|
; CHECK-NEXT: br i1 [[EXITCOND77_NOT]], label %[[FOR_COND33_PREHEADER1]], label %[[VECTOR_BODY85_SPLIT]]
|
|
; CHECK: [[FOR_COND75_PREHEADER]]:
|
|
; CHECK-NEXT: unreachable
|
|
;
|
|
entry:
|
|
br label %for.cond33.preheader
|
|
|
|
for.cond33.preheader: ; preds = %for.inc68, %entry
|
|
%i.166 = phi i16 [ %inc69, %for.inc68 ], [ 0, %entry ]
|
|
br label %for.cond37.preheader
|
|
|
|
for.cond37.preheader: ; preds = %middle.block80, %for.cond33.preheader
|
|
%j.165 = phi i16 [ 0, %for.cond33.preheader ], [ %inc66, %middle.block80 ]
|
|
%arrayidx60 = getelementptr inbounds [2 x [4 x i32]], ptr @c, i16 0, i16 %i.166, i16 %j.165
|
|
br label %vector.body85
|
|
|
|
vector.body85: ; preds = %vector.body85, %for.cond37.preheader
|
|
%index86 = phi i16 [ 0, %for.cond37.preheader ], [ %index.next87, %vector.body85 ]
|
|
%0 = or disjoint i16 %index86, 2
|
|
%1 = getelementptr inbounds [512 x [4 x i32]], ptr @b, i16 0, i16 %0, i16 %j.165
|
|
%2 = load i32, ptr %1, align 1
|
|
%index.next87 = add nuw i16 %index86, 4
|
|
%cmp2 = icmp slt i16 %index86, 42
|
|
br i1 %cmp2, label %vector.body85, label %middle.block80
|
|
|
|
middle.block80: ; preds = %vector.body85
|
|
%inc66 = add nuw nsw i16 %j.165, 1
|
|
%cmp = icmp slt i16 %inc66, 42
|
|
br i1 %cmp, label %for.cond37.preheader, label %for.inc68
|
|
|
|
for.inc68: ; preds = %middle.block80
|
|
%inc69 = add nuw nsw i16 %i.166, 1
|
|
%exitcond77.not = icmp slt i16 %inc69, 24
|
|
br i1 %exitcond77.not, label %for.cond33.preheader, label %for.cond75.preheader
|
|
|
|
for.cond75.preheader: ; preds = %for.inc68
|
|
unreachable
|
|
}
|
|
|
|
; Same as test1, but with a third index on the GEP
|
|
define void @test3() {
|
|
; CHECK-LABEL: define void @test3() {
|
|
; CHECK-NEXT: [[FOR_COND33_PREHEADER:.*:]]
|
|
; CHECK-NEXT: br label %[[FOR_BODY42_SPLIT1:.*]]
|
|
; CHECK: [[FOR_COND33_PREHEADER_PREHEADER:.*]]:
|
|
; CHECK-NEXT: br label %[[FOR_BODY42:.*]]
|
|
; CHECK: [[FOR_BODY42]]:
|
|
; CHECK-NEXT: [[I_011:%.*]] = phi i16 [ [[INC69:%.*]], %[[FOR_END68:.*]] ], [ 0, %[[FOR_COND33_PREHEADER_PREHEADER]] ]
|
|
; CHECK-NEXT: br label %[[FOR_COND38_PREHEADER:.*]]
|
|
; CHECK: [[FOR_BODY42_PREHEADER:.*]]:
|
|
; CHECK-NEXT: br label %[[FOR_COND37_PREHEADER:.*]]
|
|
; CHECK: [[FOR_BODY42_SPLIT1]]:
|
|
; CHECK-NEXT: br label %[[FOR_COND38_PREHEADER_PREHEADER:.*]]
|
|
; CHECK: [[FOR_COND38_PREHEADER_PREHEADER]]:
|
|
; CHECK-NEXT: [[J_010:%.*]] = phi i16 [ [[TMP5:%.*]], %[[FOR_END67:.*]] ], [ 0, %[[FOR_BODY42_SPLIT1]] ]
|
|
; CHECK-NEXT: br label %[[FOR_BODY42_PREHEADER]]
|
|
; CHECK: [[FOR_COND37_PREHEADER]]:
|
|
; CHECK-NEXT: [[K_010:%.*]] = phi i16 [ [[TMP1:%.*]], %[[FOR_END64:.*]] ], [ 0, %[[FOR_BODY42_PREHEADER]] ]
|
|
; CHECK-NEXT: br label %[[FOR_COND33_PREHEADER_PREHEADER]]
|
|
; CHECK: [[FOR_COND38_PREHEADER]]:
|
|
; CHECK-NEXT: [[K_09:%.*]] = phi i16 [ -512, %[[FOR_BODY42]] ], [ [[TMP3:%.*]], %[[FOR_COND38_PREHEADER]] ]
|
|
; CHECK-NEXT: [[SUB51:%.*]] = add nsw i16 [[K_09]], 512
|
|
; CHECK-NEXT: [[ARRAYIDX55:%.*]] = getelementptr inbounds [1024 x [512 x [4 x i32]]], ptr @d, i16 0, i16 [[SUB51]], i16 [[J_010]], i16 [[K_010]]
|
|
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX55]], align 1
|
|
; CHECK-NEXT: [[ADD61:%.*]] = add i32 undef, undef
|
|
; CHECK-NEXT: [[TMP3]] = add nsw i16 [[K_09]], 1
|
|
; CHECK-NEXT: [[TMP2:%.*]] = icmp slt i16 [[K_09]], 42
|
|
; CHECK-NEXT: br i1 [[TMP2]], label %[[FOR_COND38_PREHEADER]], label %[[FOR_END65:.*]]
|
|
; CHECK: [[FOR_END65]]:
|
|
; CHECK-NEXT: [[ADD61_LCSSA_LCSSA:%.*]] = phi i32 [ [[ADD61]], %[[FOR_COND38_PREHEADER]] ]
|
|
; CHECK-NEXT: store i32 [[ADD61_LCSSA_LCSSA]], ptr undef, align 1
|
|
; CHECK-NEXT: [[INC67:%.*]] = add nuw nsw i16 [[K_010]], 1
|
|
; CHECK-NEXT: [[CMP3:%.*]] = icmp slt i16 [[K_010]], 44
|
|
; CHECK-NEXT: br label %[[FOR_END66:.*]]
|
|
; CHECK: [[FOR_END64]]:
|
|
; CHECK-NEXT: [[TMP1]] = add nuw nsw i16 [[K_010]], 1
|
|
; CHECK-NEXT: [[TMP6:%.*]] = icmp slt i16 [[K_010]], 44
|
|
; CHECK-NEXT: br i1 [[TMP6]], label %[[FOR_COND37_PREHEADER]], label %[[FOR_END67]]
|
|
; CHECK: [[FOR_END66]]:
|
|
; CHECK-NEXT: [[INC66:%.*]] = add nuw nsw i16 [[J_010]], 1
|
|
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i16 [[J_010]], 43
|
|
; CHECK-NEXT: br label %[[FOR_END68]]
|
|
; CHECK: [[FOR_END67]]:
|
|
; CHECK-NEXT: [[TMP5]] = add nuw nsw i16 [[J_010]], 1
|
|
; CHECK-NEXT: [[TMP4:%.*]] = icmp slt i16 [[J_010]], 43
|
|
; CHECK-NEXT: br i1 [[TMP4]], label %[[FOR_COND38_PREHEADER_PREHEADER]], label %[[FOR_COND75_PREHEADER:.*]]
|
|
; CHECK: [[FOR_END68]]:
|
|
; CHECK-NEXT: [[INC69]] = add nuw nsw i16 [[I_011]], 1
|
|
; CHECK-NEXT: [[EXITCOND13_NOT:%.*]] = icmp eq i16 [[INC69]], 2
|
|
; CHECK-NEXT: br i1 [[EXITCOND13_NOT]], label %[[FOR_END64]], label %[[FOR_BODY42]]
|
|
; CHECK: [[FOR_COND75_PREHEADER]]:
|
|
; CHECK-NEXT: br label %[[FOR_COND75:.*]]
|
|
; CHECK: [[FOR_COND75]]:
|
|
; CHECK-NEXT: br label %[[FOR_COND75]]
|
|
;
|
|
entry:
|
|
br label %for.cond33.preheader
|
|
|
|
for.cond33.preheader: ; preds = %for.end67, %entry
|
|
%i.011 = phi i16 [ 0, %entry ], [ %inc69, %for.end67 ]
|
|
br label %for.cond37.preheader
|
|
|
|
for.cond37.preheader: ; preds = %for.end64, %for.cond33.preheader
|
|
%j.010 = phi i16 [ 0, %for.cond33.preheader ], [ %inc66, %for.end64 ]
|
|
br label %for.cond38.preheader
|
|
|
|
for.cond38.preheader: ; preds = %for.end65, %for.cond37.preheader
|
|
%k.010 = phi i16 [ 0, %for.cond37.preheader ], [ %inc67, %for.end65 ]
|
|
br label %for.body42
|
|
|
|
for.body42: ; preds = %for.body42, %for.cond38.preheader
|
|
%k.09 = phi i16 [ -512, %for.cond38.preheader ], [ %inc63, %for.body42 ]
|
|
%sub51 = add nsw i16 %k.09, 512
|
|
%arrayidx55 = getelementptr inbounds [1024 x [512 x [4 x i32]]], ptr @d, i16 0, i16 %sub51, i16 %j.010, i16 %k.010
|
|
%0 = load i32, ptr %arrayidx55, align 1
|
|
%add61 = add i32 undef, undef
|
|
%inc63 = add nsw i16 %k.09, 1
|
|
%cmp = icmp slt i16 %k.09, 42
|
|
br i1 %cmp, label %for.body42, label %for.end65
|
|
|
|
for.end65: ; preds = %for.body42
|
|
store i32 %add61, ptr undef, align 1
|
|
%inc67 = add nuw nsw i16 %k.010, 1
|
|
%cmp3 = icmp slt i16 %k.010, 44
|
|
br i1 %cmp3, label %for.cond38.preheader, label %for.end64
|
|
|
|
for.end64: ; preds = %for.end65
|
|
%inc66 = add nuw nsw i16 %j.010, 1
|
|
%cmp2 = icmp slt i16 %j.010, 43
|
|
br i1 %cmp2, label %for.cond37.preheader, label %for.end67
|
|
|
|
for.end67: ; preds = %for.end64
|
|
%inc69 = add nuw nsw i16 %i.011, 1
|
|
%exitcond13.not = icmp eq i16 %inc69, 2
|
|
br i1 %exitcond13.not, label %for.cond75, label %for.cond33.preheader
|
|
|
|
for.cond75: ; preds = %for.cond75, %for.end67
|
|
br label %for.cond75
|
|
}
|