[llvm] [InstSimplify] Fix Compilation Hang in simplifyExtractValueInst (PR #190279)
Sharjeel Khan via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 5 14:44:41 PDT 2026
https://github.com/Sharjeel-Khan updated https://github.com/llvm/llvm-project/pull/190279
>From 1e4ad4e169d2e02c0b9ad9307f0617f77a1e2a49 Mon Sep 17 00:00:00 2001
From: Sharjeel Khan <sharjeelkhan at google.com>
Date: Tue, 31 Mar 2026 02:50:47 +0000
Subject: [PATCH 01/10] Add check for self-referential and break
---
llvm/lib/Analysis/InstructionSimplify.cpp | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index 12c3edc0ced30..4c5eeb5e51853 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -5455,8 +5455,7 @@ static Value *simplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
// extractvalue x, (insertvalue y, elt, n), n -> elt
unsigned NumIdxs = Idxs.size();
- for (auto *IVI = dyn_cast<InsertValueInst>(Agg); IVI != nullptr;
- IVI = dyn_cast<InsertValueInst>(IVI->getAggregateOperand())) {
+ for (auto *IVI = dyn_cast<InsertValueInst>(Agg); IVI != nullptr;) {
ArrayRef<unsigned> InsertValueIdxs = IVI->getIndices();
unsigned NumInsertValueIdxs = InsertValueIdxs.size();
unsigned NumCommonIdxs = std::min(NumInsertValueIdxs, NumIdxs);
@@ -5466,6 +5465,14 @@ static Value *simplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
return IVI->getInsertedValueOperand();
break;
}
+
+ // Based on the verifier, self-referential insertvalues are apparently
+ // fine in unreachable blocks and they will cause this loop to run in
+ // infinitely. I am just adding a check to break out if it is the case.
+ auto *newIVI = dyn_cast<InsertValueInst>(IVI->getAggregateOperand());
+ if (IVI == newIVI)
+ break;
+ IVI = newIVI;
}
// Simplify umul_with_overflow where one operand is 1.
>From 23b8dfa3e29af3c3d0212b9d3c7344d48a183f9b Mon Sep 17 00:00:00 2001
From: Sharjeel Khan <sharjeelkhan at google.com>
Date: Thu, 2 Apr 2026 22:51:43 +0000
Subject: [PATCH 02/10] Added reduced bitcode as a test
---
.../CorrelatedValuePropagation/pr187381.ll | 1490 +++++++++++++++++
1 file changed, 1490 insertions(+)
create mode 100644 llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll b/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
new file mode 100644
index 0000000000000..8e259f75bf9ea
--- /dev/null
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
@@ -0,0 +1,1490 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s
+
+define i32 @main() {
+; CHECK-LABEL: define i32 @main() {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: br i1 false, label %[[ENTRY_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE:.*]], label %[[LAND_RHS_I_I:.*]]
+; CHECK: [[ENTRY_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE]]:
+; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT_THREAD:.*]]
+; CHECK: [[LAND_RHS_I_I]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I_I_WHILE_BODY_I_CRIT_EDGE:.*]], label %[[LAND_RHS_I84_I:.*]]
+; CHECK: [[LAND_RHS_I_I_WHILE_BODY_I_CRIT_EDGE]]:
+; CHECK-NEXT: br label %[[WHILE_BODY_I:.*]]
+; CHECK: [[LAND_RHS_I74_I:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I]], label %[[LAND_RHS_I74_I_MPATH_PARENT_EXIT_CRIT_EDGE:.*]]
+; CHECK: [[LAND_RHS_I74_I_MPATH_PARENT_EXIT_CRIT_EDGE]]:
+; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT:.*]]
+; CHECK: [[WHILE_BODY_I]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE:.*]], label %[[LAND_RHS_I74_I]]
+; CHECK: [[WHILE_BODY_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE]]:
+; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT_THREAD]]
+; CHECK: [[LAND_RHS_I84_I]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I:.*]], label %[[WHILE_BODY4_I:.*]]
+; CHECK: [[WHILE_BODY4_I]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY4_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE:.*]], label %[[LAND_RHS_I84_I]]
+; CHECK: [[WHILE_BODY4_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE]]:
+; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT_THREAD]]
+; CHECK: [[WHILE_END6_I]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I:.*]], label %[[WHILE_END6_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE:.*]]
+; CHECK: [[WHILE_END6_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE]]:
+; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT_THREAD]]
+; CHECK: [[LAND_RHS_I99_I]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I:.*]], label %[[MPATH_PARENT_EXIT]]
+; CHECK: [[WHILE_BODY13_I]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I]], label %[[WHILE_BODY13_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE:.*]]
+; CHECK: [[WHILE_BODY13_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE]]:
+; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT_THREAD]]
+; CHECK: [[MPATH_PARENT_EXIT_THREAD]]:
+; CHECK-NEXT: br label %[[IF_THEN_I:.*]]
+; CHECK: [[MPATH_PARENT_EXIT]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I:.*]], label %[[MPATH_PARENT_EXIT_IF_THEN_I_CRIT_EDGE:.*]]
+; CHECK: [[MPATH_PARENT_EXIT_IF_THEN_I_CRIT_EDGE]]:
+; CHECK-NEXT: br label %[[IF_THEN_I]]
+; CHECK: [[MSTR_EQ_EXIT_I]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT:.*]], label %[[MSTR_EQ_EXIT_I_IF_THEN_I_CRIT_EDGE:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I_IF_THEN_I_CRIT_EDGE]]:
+; CHECK-NEXT: br label %[[IF_THEN_I]]
+; CHECK: [[IF_THEN_I]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT767:.*]], label %[[LAND_RHS_I_I735:.*]]
+; CHECK: [[LAND_RHS_I_I735]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I758:.*]], label %[[LAND_RHS_I84_I738:.*]]
+; CHECK: [[LAND_RHS_I74_I764:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I758]], label %[[LAND_RHS_I_I769:.*]]
+; CHECK: [[WHILE_BODY_I758]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT767]], label %[[LAND_RHS_I74_I764]]
+; CHECK: [[LAND_RHS_I84_I738]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I748:.*]], label %[[WHILE_BODY4_I742:.*]]
+; CHECK: [[WHILE_BODY4_I742]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT767]], label %[[LAND_RHS_I84_I738]]
+; CHECK: [[WHILE_END6_I748]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I751:.*]], label %[[LAND_RHS_I_I769]]
+; CHECK: [[LAND_RHS_I99_I751]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I755:.*]], label %[[LAND_RHS_I_I769]]
+; CHECK: [[WHILE_BODY13_I755]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I751]], label %[[LAND_RHS_I_I769]]
+; CHECK: [[MPATH_PARENT_EXIT767]]:
+; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT801_THREAD:.*]]
+; CHECK: [[LAND_RHS_I_I769]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I792:.*]], label %[[LAND_RHS_I84_I772:.*]]
+; CHECK: [[LAND_RHS_I74_I798:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I792]], label %[[MPATH_PARENT_EXIT801:.*]]
+; CHECK: [[WHILE_BODY_I792]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT801_THREAD]], label %[[LAND_RHS_I74_I798]]
+; CHECK: [[LAND_RHS_I84_I772]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I782:.*]], label %[[WHILE_BODY4_I776:.*]]
+; CHECK: [[WHILE_BODY4_I776]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT801_THREAD]], label %[[LAND_RHS_I84_I772]]
+; CHECK: [[WHILE_END6_I782]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I785:.*]], label %[[MPATH_PARENT_EXIT801_THREAD]]
+; CHECK: [[LAND_RHS_I99_I785]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I789:.*]], label %[[MPATH_PARENT_EXIT801]]
+; CHECK: [[WHILE_BODY13_I789]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I785]], label %[[MPATH_PARENT_EXIT801_THREAD]]
+; CHECK: [[MPATH_PARENT_EXIT801_THREAD]]:
+; CHECK-NEXT: br label %[[IF_THEN_I804:.*]]
+; CHECK: [[MPATH_PARENT_EXIT801]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I806:.*]], label %[[IF_THEN_I804]]
+; CHECK: [[MSTR_EQ_EXIT_I806]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I_I812:.*]], label %[[IF_THEN_I804]]
+; CHECK: [[IF_THEN_I804]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[LAND_RHS_I84_US_I:.*]]:
+; CHECK-NEXT: br label %[[WHILE_BODY4_US_I:.*]]
+; CHECK: [[WHILE_BODY4_US_I]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT820:.*]], label %[[LAND_RHS_I84_US_I]]
+; CHECK: [[LAND_RHS_I_I812]]:
+; CHECK-NEXT: br label %[[LAND_RHS_I84_US_I]]
+; CHECK: [[LAND_RHS_I74_US_I:.*]]:
+; CHECK-NEXT: [[TMP0:%.*]] = insertvalue [2 x i32] [[TMP0]], i32 0, 1
+; CHECK-NEXT: [[PATH_COERCE_FCA_0_EXTRACT_I75_US_I:%.*]] = extractvalue [2 x i32] [[TMP0]], 0
+; CHECK-NEXT: switch i8 0, label %[[MPATH_PARENT_EXIT820]] [
+; CHECK-NEXT: i8 92, label %[[WHILE_BODY_US_I:.*]]
+; CHECK-NEXT: i8 47, label %[[WHILE_BODY_US_I]]
+; CHECK-NEXT: ]
+; CHECK: [[WHILE_BODY_US_I]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT820]], label %[[LAND_RHS_I74_US_I]]
+; CHECK: [[WHILE_END6_I817:.*]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_US_I:.*]], label %[[MPATH_PARENT_EXIT820]]
+; CHECK: [[LAND_RHS_I99_US_I]]:
+; CHECK-NEXT: switch i8 0, label %[[MPATH_PARENT_EXIT820]] [
+; CHECK-NEXT: i8 92, label %[[WHILE_BODY13_US_I:.*]]
+; CHECK-NEXT: i8 47, label %[[WHILE_BODY13_US_I]]
+; CHECK-NEXT: ]
+; CHECK: [[WHILE_BODY13_US_I]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_US_I]], label %[[MPATH_PARENT_EXIT820]]
+; CHECK: [[MPATH_PARENT_EXIT820]]:
+; CHECK-NEXT: [[PATH_COERCE_FCA_0_EXTRACT_SINK_I814:%.*]] = phi i32 [ 0, %[[WHILE_END6_I817]] ], [ [[PATH_COERCE_FCA_0_EXTRACT_I75_US_I]], %[[LAND_RHS_I74_US_I]] ], [ 0, %[[WHILE_BODY_US_I]] ], [ 0, %[[WHILE_BODY13_US_I]] ], [ 0, %[[LAND_RHS_I99_US_I]] ], [ 0, %[[WHILE_BODY4_US_I]] ]
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I826:.*]], label %[[IF_THEN_I824:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I826]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I_I832:.*]], label %[[IF_THEN_I824]]
+; CHECK: [[IF_THEN_I824]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[LAND_RHS_I_I832]]:
+; CHECK-NEXT: br label %[[LAND_RHS_I84_I835:.*]]
+; CHECK: [[LAND_RHS_I84_I835]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I845:.*]], label %[[WHILE_BODY4_I839:.*]]
+; CHECK: [[WHILE_BODY4_I839]]:
+; CHECK-NEXT: br i1 false, label %[[IF_THEN_I871:.*]], label %[[LAND_RHS_I84_I835]]
+; CHECK: [[WHILE_END6_I845]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I848:.*]], label %[[LAND_RHS_I_I866:.*]]
+; CHECK: [[LAND_RHS_I99_I848]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I852:.*]], label %[[LAND_RHS_I_I866]]
+; CHECK: [[WHILE_BODY13_I852]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I848]], label %[[LAND_RHS_I_I866]]
+; CHECK: [[IF_THEN_I871]]:
+; CHECK-NEXT: br label %[[MPATH_JOIN_EXIT:.*]]
+; CHECK: [[LAND_RHS_I_I866]]:
+; CHECK-NEXT: br i1 false, label %[[IF_THEN6_I_I_I:.*]], label %[[IF_END9_I:.*]]
+; CHECK: [[IF_THEN6_I_I_I]]:
+; CHECK-NEXT: br label %[[MPATH_JOIN_EXIT]]
+; CHECK: [[IF_END9_I]]:
+; CHECK-NEXT: br label %[[MPATH_JOIN_EXIT]]
+; CHECK: [[MPATH_JOIN_EXIT]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I879:.*]], label %[[IF_THEN_I877:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I879]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT882:.*]], label %[[IF_THEN_I877]]
+; CHECK: [[IF_THEN_I877]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT882]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT917:.*]], label %[[LAND_RHS_I_I885:.*]]
+; CHECK: [[LAND_RHS_I_I885]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I908:.*]], label %[[LAND_RHS_I84_I888:.*]]
+; CHECK: [[LAND_RHS_I74_I914:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I908]], label %[[MPATH_PARENT_EXIT917]]
+; CHECK: [[WHILE_BODY_I908]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT917]], label %[[LAND_RHS_I74_I914]]
+; CHECK: [[LAND_RHS_I84_I888]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I898:.*]], label %[[WHILE_BODY4_I892:.*]]
+; CHECK: [[WHILE_BODY4_I892]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT917]], label %[[LAND_RHS_I84_I888]]
+; CHECK: [[WHILE_END6_I898]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I901:.*]], label %[[MPATH_PARENT_EXIT917]]
+; CHECK: [[LAND_RHS_I99_I901]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I905:.*]], label %[[MPATH_PARENT_EXIT917]]
+; CHECK: [[WHILE_BODY13_I905]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I901]], label %[[MPATH_PARENT_EXIT917]]
+; CHECK: [[MPATH_PARENT_EXIT917]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I923:.*]], label %[[IF_THEN_I921:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I923]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT926:.*]], label %[[IF_THEN_I921]]
+; CHECK: [[IF_THEN_I921]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT926]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT962:.*]], label %[[LAND_RHS_I_I930:.*]]
+; CHECK: [[LAND_RHS_I_I930]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I953:.*]], label %[[LAND_RHS_I84_I933:.*]]
+; CHECK: [[LAND_RHS_I74_I959:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I953]], label %[[MPATH_PARENT_EXIT962]]
+; CHECK: [[WHILE_BODY_I953]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT962]], label %[[LAND_RHS_I74_I959]]
+; CHECK: [[LAND_RHS_I84_I933]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I943:.*]], label %[[WHILE_BODY4_I937:.*]]
+; CHECK: [[WHILE_BODY4_I937]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT962]], label %[[LAND_RHS_I84_I933]]
+; CHECK: [[WHILE_END6_I943]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I946:.*]], label %[[MPATH_PARENT_EXIT962]]
+; CHECK: [[LAND_RHS_I99_I946]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I950:.*]], label %[[MPATH_PARENT_EXIT962]]
+; CHECK: [[WHILE_BODY13_I950]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I946]], label %[[MPATH_PARENT_EXIT962]]
+; CHECK: [[MPATH_PARENT_EXIT962]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I968:.*]], label %[[IF_THEN_I966:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I968]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT971:.*]], label %[[IF_THEN_I966]]
+; CHECK: [[IF_THEN_I966]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT971]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1007:.*]], label %[[LAND_RHS_I_I975:.*]]
+; CHECK: [[LAND_RHS_I_I975]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I998:.*]], label %[[LAND_RHS_I84_I978:.*]]
+; CHECK: [[LAND_RHS_I74_I1004:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I998]], label %[[MPATH_PARENT_EXIT1007]]
+; CHECK: [[WHILE_BODY_I998]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1007]], label %[[LAND_RHS_I74_I1004]]
+; CHECK: [[LAND_RHS_I84_I978]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I988:.*]], label %[[WHILE_BODY4_I982:.*]]
+; CHECK: [[WHILE_BODY4_I982]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1007]], label %[[LAND_RHS_I84_I978]]
+; CHECK: [[WHILE_END6_I988]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I991:.*]], label %[[MPATH_PARENT_EXIT1007]]
+; CHECK: [[LAND_RHS_I99_I991]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I995:.*]], label %[[MPATH_PARENT_EXIT1007]]
+; CHECK: [[WHILE_BODY13_I995]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I991]], label %[[MPATH_PARENT_EXIT1007]]
+; CHECK: [[MPATH_PARENT_EXIT1007]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1013:.*]], label %[[IF_THEN_I1011:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1013]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1016:.*]], label %[[IF_THEN_I1011]]
+; CHECK: [[IF_THEN_I1011]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1016]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1052:.*]], label %[[LAND_RHS_I_I1020:.*]]
+; CHECK: [[LAND_RHS_I_I1020]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1043:.*]], label %[[LAND_RHS_I84_I1023:.*]]
+; CHECK: [[LAND_RHS_I74_I1049:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1043]], label %[[MPATH_PARENT_EXIT1052]]
+; CHECK: [[WHILE_BODY_I1043]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1052]], label %[[LAND_RHS_I74_I1049]]
+; CHECK: [[LAND_RHS_I84_I1023]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1033:.*]], label %[[WHILE_BODY4_I1027:.*]]
+; CHECK: [[WHILE_BODY4_I1027]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1052]], label %[[LAND_RHS_I84_I1023]]
+; CHECK: [[WHILE_END6_I1033]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1036:.*]], label %[[MPATH_PARENT_EXIT1052]]
+; CHECK: [[LAND_RHS_I99_I1036]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1040:.*]], label %[[MPATH_PARENT_EXIT1052]]
+; CHECK: [[WHILE_BODY13_I1040]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1036]], label %[[MPATH_PARENT_EXIT1052]]
+; CHECK: [[MPATH_PARENT_EXIT1052]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1058:.*]], label %[[IF_THEN_I1056:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1058]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1061:.*]], label %[[IF_THEN_I1056]]
+; CHECK: [[IF_THEN_I1056]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1061]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1097:.*]], label %[[LAND_RHS_I_I1065:.*]]
+; CHECK: [[LAND_RHS_I_I1065]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1088:.*]], label %[[LAND_RHS_I84_I1068:.*]]
+; CHECK: [[LAND_RHS_I74_I1094:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1088]], label %[[MPATH_PARENT_EXIT1097]]
+; CHECK: [[WHILE_BODY_I1088]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1097]], label %[[LAND_RHS_I74_I1094]]
+; CHECK: [[LAND_RHS_I84_I1068]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1078:.*]], label %[[WHILE_BODY4_I1072:.*]]
+; CHECK: [[WHILE_BODY4_I1072]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1097]], label %[[LAND_RHS_I84_I1068]]
+; CHECK: [[WHILE_END6_I1078]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1081:.*]], label %[[MPATH_PARENT_EXIT1097]]
+; CHECK: [[LAND_RHS_I99_I1081]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1085:.*]], label %[[MPATH_PARENT_EXIT1097]]
+; CHECK: [[WHILE_BODY13_I1085]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1081]], label %[[MPATH_PARENT_EXIT1097]]
+; CHECK: [[MPATH_PARENT_EXIT1097]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1103:.*]], label %[[IF_THEN_I1101:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1103]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1106:.*]], label %[[IF_THEN_I1101]]
+; CHECK: [[IF_THEN_I1101]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1106]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1142:.*]], label %[[LAND_RHS_I_I1110:.*]]
+; CHECK: [[LAND_RHS_I_I1110]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1133:.*]], label %[[LAND_RHS_I84_I1113:.*]]
+; CHECK: [[LAND_RHS_I74_I1139:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1133]], label %[[MPATH_PARENT_EXIT1142]]
+; CHECK: [[WHILE_BODY_I1133]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1142]], label %[[LAND_RHS_I74_I1139]]
+; CHECK: [[LAND_RHS_I84_I1113]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1123:.*]], label %[[WHILE_BODY4_I1117:.*]]
+; CHECK: [[WHILE_BODY4_I1117]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1142]], label %[[LAND_RHS_I84_I1113]]
+; CHECK: [[WHILE_END6_I1123]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1126:.*]], label %[[MPATH_PARENT_EXIT1142]]
+; CHECK: [[LAND_RHS_I99_I1126]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1130:.*]], label %[[MPATH_PARENT_EXIT1142]]
+; CHECK: [[WHILE_BODY13_I1130]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1126]], label %[[MPATH_PARENT_EXIT1142]]
+; CHECK: [[MPATH_PARENT_EXIT1142]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1148:.*]], label %[[IF_THEN_I1146:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1148]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1151:.*]], label %[[IF_THEN_I1146]]
+; CHECK: [[IF_THEN_I1146]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1151]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1187:.*]], label %[[LAND_RHS_I_I1155:.*]]
+; CHECK: [[LAND_RHS_I_I1155]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1178:.*]], label %[[LAND_RHS_I84_I1158:.*]]
+; CHECK: [[LAND_RHS_I74_I1184:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1178]], label %[[MPATH_PARENT_EXIT1187]]
+; CHECK: [[WHILE_BODY_I1178]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1187]], label %[[LAND_RHS_I74_I1184]]
+; CHECK: [[LAND_RHS_I84_I1158]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1168:.*]], label %[[WHILE_BODY4_I1162:.*]]
+; CHECK: [[WHILE_BODY4_I1162]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1187]], label %[[LAND_RHS_I84_I1158]]
+; CHECK: [[WHILE_END6_I1168]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1171:.*]], label %[[MPATH_PARENT_EXIT1187]]
+; CHECK: [[LAND_RHS_I99_I1171]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1175:.*]], label %[[MPATH_PARENT_EXIT1187]]
+; CHECK: [[WHILE_BODY13_I1175]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1171]], label %[[MPATH_PARENT_EXIT1187]]
+; CHECK: [[MPATH_PARENT_EXIT1187]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1193:.*]], label %[[IF_THEN_I1191:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1193]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1196:.*]], label %[[IF_THEN_I1191]]
+; CHECK: [[IF_THEN_I1191]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1196]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1232:.*]], label %[[LAND_RHS_I_I1200:.*]]
+; CHECK: [[LAND_RHS_I_I1200]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1223:.*]], label %[[LAND_RHS_I84_I1203:.*]]
+; CHECK: [[LAND_RHS_I74_I1229:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1223]], label %[[MPATH_PARENT_EXIT1232]]
+; CHECK: [[WHILE_BODY_I1223]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1232]], label %[[LAND_RHS_I74_I1229]]
+; CHECK: [[LAND_RHS_I84_I1203]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1213:.*]], label %[[WHILE_BODY4_I1207:.*]]
+; CHECK: [[WHILE_BODY4_I1207]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1232]], label %[[LAND_RHS_I84_I1203]]
+; CHECK: [[WHILE_END6_I1213]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1216:.*]], label %[[MPATH_PARENT_EXIT1232]]
+; CHECK: [[LAND_RHS_I99_I1216]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1220:.*]], label %[[MPATH_PARENT_EXIT1232]]
+; CHECK: [[WHILE_BODY13_I1220]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1216]], label %[[MPATH_PARENT_EXIT1232]]
+; CHECK: [[MPATH_PARENT_EXIT1232]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1238:.*]], label %[[IF_THEN_I1236:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1238]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1241:.*]], label %[[IF_THEN_I1236]]
+; CHECK: [[IF_THEN_I1236]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1241]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1277:.*]], label %[[LAND_RHS_I_I1245:.*]]
+; CHECK: [[LAND_RHS_I_I1245]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1268:.*]], label %[[LAND_RHS_I84_I1248:.*]]
+; CHECK: [[LAND_RHS_I74_I1274:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1268]], label %[[MPATH_PARENT_EXIT1277]]
+; CHECK: [[WHILE_BODY_I1268]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1277]], label %[[LAND_RHS_I74_I1274]]
+; CHECK: [[LAND_RHS_I84_I1248]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1258:.*]], label %[[WHILE_BODY4_I1252:.*]]
+; CHECK: [[WHILE_BODY4_I1252]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1277]], label %[[LAND_RHS_I84_I1248]]
+; CHECK: [[WHILE_END6_I1258]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1261:.*]], label %[[MPATH_PARENT_EXIT1277]]
+; CHECK: [[LAND_RHS_I99_I1261]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1265:.*]], label %[[MPATH_PARENT_EXIT1277]]
+; CHECK: [[WHILE_BODY13_I1265]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1261]], label %[[MPATH_PARENT_EXIT1277]]
+; CHECK: [[MPATH_PARENT_EXIT1277]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1283:.*]], label %[[IF_THEN_I1281:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1283]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1286:.*]], label %[[IF_THEN_I1281]]
+; CHECK: [[IF_THEN_I1281]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1286]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1322:.*]], label %[[LAND_RHS_I_I1290:.*]]
+; CHECK: [[LAND_RHS_I_I1290]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1313:.*]], label %[[LAND_RHS_I84_I1293:.*]]
+; CHECK: [[LAND_RHS_I74_I1319:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1313]], label %[[MPATH_PARENT_EXIT1322]]
+; CHECK: [[WHILE_BODY_I1313]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1322]], label %[[LAND_RHS_I74_I1319]]
+; CHECK: [[LAND_RHS_I84_I1293]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1303:.*]], label %[[WHILE_BODY4_I1297:.*]]
+; CHECK: [[WHILE_BODY4_I1297]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1322]], label %[[LAND_RHS_I84_I1293]]
+; CHECK: [[WHILE_END6_I1303]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1306:.*]], label %[[MPATH_PARENT_EXIT1322]]
+; CHECK: [[LAND_RHS_I99_I1306]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1310:.*]], label %[[MPATH_PARENT_EXIT1322]]
+; CHECK: [[WHILE_BODY13_I1310]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1306]], label %[[MPATH_PARENT_EXIT1322]]
+; CHECK: [[MPATH_PARENT_EXIT1322]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1328:.*]], label %[[IF_THEN_I1326:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1328]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1331:.*]], label %[[IF_THEN_I1326]]
+; CHECK: [[IF_THEN_I1326]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1331]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1367:.*]], label %[[LAND_RHS_I_I1335:.*]]
+; CHECK: [[LAND_RHS_I_I1335]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1358:.*]], label %[[LAND_RHS_I84_I1338:.*]]
+; CHECK: [[LAND_RHS_I74_I1364:.*]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1358]], label %[[MPATH_PARENT_EXIT1367]]
+; CHECK: [[WHILE_BODY_I1358]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1367]], label %[[LAND_RHS_I74_I1364]]
+; CHECK: [[LAND_RHS_I84_I1338]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1348:.*]], label %[[WHILE_BODY4_I1342:.*]]
+; CHECK: [[WHILE_BODY4_I1342]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1367]], label %[[LAND_RHS_I84_I1338]]
+; CHECK: [[WHILE_END6_I1348]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1351:.*]], label %[[MPATH_PARENT_EXIT1367]]
+; CHECK: [[LAND_RHS_I99_I1351]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1355:.*]], label %[[MPATH_PARENT_EXIT1367]]
+; CHECK: [[WHILE_BODY13_I1355]]:
+; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1351]], label %[[MPATH_PARENT_EXIT1367]]
+; CHECK: [[MPATH_PARENT_EXIT1367]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1373:.*]], label %[[IF_THEN_I1371:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1373]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1376:.*]], label %[[IF_THEN_I1371]]
+; CHECK: [[IF_THEN_I1371]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1376]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT:.*]], label %[[IF_END_I:.*]]
+; CHECK: [[IF_END_I]]:
+; CHECK-NEXT: br label %[[WHILE_COND_I:.*]]
+; CHECK: [[WHILE_COND_I]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I:.*]], label %[[LAND_RHS_I:.*]]
+; CHECK: [[LAND_RHS_I]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I]], label %[[WHILE_COND_I]]
+; CHECK: [[WHILE_END_I]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT]], label %[[IF_END8_I:.*]]
+; CHECK: [[IF_END8_I]]:
+; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT]]
+; CHECK: [[MPATH_FILENAME_EXIT]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1391:.*]], label %[[IF_THEN_I1389:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1391]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1394:.*]], label %[[IF_THEN_I1389]]
+; CHECK: [[IF_THEN_I1389]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1394]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1419:.*]], label %[[IF_END_I1398:.*]]
+; CHECK: [[IF_END_I1398]]:
+; CHECK-NEXT: br label %[[WHILE_COND_I1400:.*]]
+; CHECK: [[WHILE_COND_I1400]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1406:.*]], label %[[LAND_RHS_I1403:.*]]
+; CHECK: [[LAND_RHS_I1403]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1406]], label %[[WHILE_COND_I1400]]
+; CHECK: [[WHILE_END_I1406]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1419]], label %[[IF_END8_I1411:.*]]
+; CHECK: [[IF_END8_I1411]]:
+; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1419]]
+; CHECK: [[MPATH_FILENAME_EXIT1419]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1425:.*]], label %[[IF_THEN_I1423:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1425]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1428:.*]], label %[[IF_THEN_I1423]]
+; CHECK: [[IF_THEN_I1423]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1428]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1453:.*]], label %[[IF_END_I1432:.*]]
+; CHECK: [[IF_END_I1432]]:
+; CHECK-NEXT: br label %[[WHILE_COND_I1434:.*]]
+; CHECK: [[WHILE_COND_I1434]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1440:.*]], label %[[LAND_RHS_I1437:.*]]
+; CHECK: [[LAND_RHS_I1437]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1440]], label %[[WHILE_COND_I1434]]
+; CHECK: [[WHILE_END_I1440]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1453]], label %[[IF_END8_I1445:.*]]
+; CHECK: [[IF_END8_I1445]]:
+; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1453]]
+; CHECK: [[MPATH_FILENAME_EXIT1453]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1459:.*]], label %[[IF_THEN_I1457:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1459]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1462:.*]], label %[[IF_THEN_I1457]]
+; CHECK: [[IF_THEN_I1457]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1462]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1487:.*]], label %[[IF_END_I1466:.*]]
+; CHECK: [[IF_END_I1466]]:
+; CHECK-NEXT: br label %[[WHILE_COND_I1468:.*]]
+; CHECK: [[WHILE_COND_I1468]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1474:.*]], label %[[LAND_RHS_I1471:.*]]
+; CHECK: [[LAND_RHS_I1471]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1474]], label %[[WHILE_COND_I1468]]
+; CHECK: [[WHILE_END_I1474]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1487]], label %[[IF_END8_I1479:.*]]
+; CHECK: [[IF_END8_I1479]]:
+; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1487]]
+; CHECK: [[MPATH_FILENAME_EXIT1487]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1493:.*]], label %[[IF_THEN_I1491:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1493]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1496:.*]], label %[[IF_THEN_I1491]]
+; CHECK: [[IF_THEN_I1491]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1496]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1521:.*]], label %[[IF_END_I1500:.*]]
+; CHECK: [[IF_END_I1500]]:
+; CHECK-NEXT: br label %[[WHILE_COND_I1502:.*]]
+; CHECK: [[WHILE_COND_I1502]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1508:.*]], label %[[LAND_RHS_I1505:.*]]
+; CHECK: [[LAND_RHS_I1505]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1508]], label %[[WHILE_COND_I1502]]
+; CHECK: [[WHILE_END_I1508]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1521]], label %[[IF_END8_I1513:.*]]
+; CHECK: [[IF_END8_I1513]]:
+; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1521]]
+; CHECK: [[MPATH_FILENAME_EXIT1521]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1527:.*]], label %[[IF_THEN_I1525:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1527]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1530:.*]], label %[[IF_THEN_I1525]]
+; CHECK: [[IF_THEN_I1525]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1530]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1555:.*]], label %[[IF_END_I1534:.*]]
+; CHECK: [[IF_END_I1534]]:
+; CHECK-NEXT: br label %[[WHILE_COND_I1536:.*]]
+; CHECK: [[WHILE_COND_I1536]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1542:.*]], label %[[LAND_RHS_I1539:.*]]
+; CHECK: [[LAND_RHS_I1539]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1542]], label %[[WHILE_COND_I1536]]
+; CHECK: [[WHILE_END_I1542]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1555]], label %[[IF_END8_I1547:.*]]
+; CHECK: [[IF_END8_I1547]]:
+; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1555]]
+; CHECK: [[MPATH_FILENAME_EXIT1555]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1561:.*]], label %[[IF_THEN_I1559:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1561]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1564:.*]], label %[[IF_THEN_I1559]]
+; CHECK: [[IF_THEN_I1559]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1564]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1589:.*]], label %[[IF_END_I1568:.*]]
+; CHECK: [[IF_END_I1568]]:
+; CHECK-NEXT: br label %[[WHILE_COND_I1570:.*]]
+; CHECK: [[WHILE_COND_I1570]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1576:.*]], label %[[LAND_RHS_I1573:.*]]
+; CHECK: [[LAND_RHS_I1573]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1576]], label %[[WHILE_COND_I1570]]
+; CHECK: [[WHILE_END_I1576]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1589]], label %[[IF_END8_I1581:.*]]
+; CHECK: [[IF_END8_I1581]]:
+; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1589]]
+; CHECK: [[MPATH_FILENAME_EXIT1589]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1595:.*]], label %[[IF_THEN_I1593:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1595]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1598:.*]], label %[[IF_THEN_I1593]]
+; CHECK: [[IF_THEN_I1593]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1598]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1623:.*]], label %[[IF_END_I1602:.*]]
+; CHECK: [[IF_END_I1602]]:
+; CHECK-NEXT: br label %[[WHILE_COND_I1604:.*]]
+; CHECK: [[WHILE_COND_I1604]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1610:.*]], label %[[LAND_RHS_I1607:.*]]
+; CHECK: [[LAND_RHS_I1607]]:
+; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1610]], label %[[WHILE_COND_I1604]]
+; CHECK: [[WHILE_END_I1610]]:
+; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1623]], label %[[IF_END8_I1615:.*]]
+; CHECK: [[IF_END8_I1615]]:
+; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1623]]
+; CHECK: [[MPATH_FILENAME_EXIT1623]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1629:.*]], label %[[IF_THEN_I1627:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1629]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1632:.*]], label %[[IF_THEN_I1627]]
+; CHECK: [[IF_THEN_I1627]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1632]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1645:.*]], label %[[IF_THEN_I1643:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1645]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1648:.*]], label %[[IF_THEN_I1643]]
+; CHECK: [[IF_THEN_I1643]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1648]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1672:.*]], label %[[IF_THEN_I1670:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1672]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1675:.*]], label %[[IF_THEN_I1670]]
+; CHECK: [[IF_THEN_I1670]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1675]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1699:.*]], label %[[IF_THEN_I1697:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1699]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1702:.*]], label %[[IF_THEN_I1697]]
+; CHECK: [[IF_THEN_I1697]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1702]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1726:.*]], label %[[IF_THEN_I1724:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1726]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1729:.*]], label %[[IF_THEN_I1724]]
+; CHECK: [[IF_THEN_I1724]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1729]]:
+; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1753:.*]], label %[[IF_THEN_I1751:.*]]
+; CHECK: [[MSTR_EQ_EXIT_I1753]]:
+; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1756:.*]], label %[[IF_THEN_I1751]]
+; CHECK: [[IF_THEN_I1751]]:
+; CHECK-NEXT: unreachable
+; CHECK: [[_MSTR_ASSERT__EXIT1756]]:
+; CHECK-NEXT: ret i32 0
+;
+entry:
+ br i1 false, label %entry.mpath_parent.exit.thread_crit_edge, label %land.rhs.i.i
+
+entry.mpath_parent.exit.thread_crit_edge: ; preds = %entry
+ br label %mpath_parent.exit.thread
+
+land.rhs.i.i: ; preds = %entry
+ br i1 false, label %land.rhs.i.i.while.body.i_crit_edge, label %land.rhs.i84.i
+
+land.rhs.i.i.while.body.i_crit_edge: ; preds = %land.rhs.i.i
+ br label %while.body.i
+
+land.rhs.i74.i: ; preds = %while.body.i
+ br i1 false, label %while.body.i, label %land.rhs.i74.i.mpath_parent.exit_crit_edge
+
+land.rhs.i74.i.mpath_parent.exit_crit_edge: ; preds = %land.rhs.i74.i
+ br label %mpath_parent.exit
+
+while.body.i: ; preds = %land.rhs.i74.i, %land.rhs.i.i.while.body.i_crit_edge
+ br i1 false, label %while.body.i.mpath_parent.exit.thread_crit_edge, label %land.rhs.i74.i
+
+while.body.i.mpath_parent.exit.thread_crit_edge: ; preds = %while.body.i
+ br label %mpath_parent.exit.thread
+
+land.rhs.i84.i: ; preds = %while.body4.i, %land.rhs.i.i
+ br i1 false, label %while.end6.i, label %while.body4.i
+
+while.body4.i: ; preds = %land.rhs.i84.i
+ br i1 false, label %while.body4.i.mpath_parent.exit.thread_crit_edge, label %land.rhs.i84.i
+
+while.body4.i.mpath_parent.exit.thread_crit_edge: ; preds = %while.body4.i
+ br label %mpath_parent.exit.thread
+
+while.end6.i: ; preds = %land.rhs.i84.i
+ br i1 false, label %land.rhs.i99.i, label %while.end6.i.mpath_parent.exit.thread_crit_edge
+
+while.end6.i.mpath_parent.exit.thread_crit_edge: ; preds = %while.end6.i
+ br label %mpath_parent.exit.thread
+
+land.rhs.i99.i: ; preds = %while.body13.i, %while.end6.i
+ br i1 false, label %while.body13.i, label %mpath_parent.exit
+
+while.body13.i: ; preds = %land.rhs.i99.i
+ br i1 false, label %land.rhs.i99.i, label %while.body13.i.mpath_parent.exit.thread_crit_edge
+
+while.body13.i.mpath_parent.exit.thread_crit_edge: ; preds = %while.body13.i
+ br label %mpath_parent.exit.thread
+
+mpath_parent.exit.thread: ; preds = %while.body13.i.mpath_parent.exit.thread_crit_edge, %while.end6.i.mpath_parent.exit.thread_crit_edge, %while.body4.i.mpath_parent.exit.thread_crit_edge, %while.body.i.mpath_parent.exit.thread_crit_edge, %entry.mpath_parent.exit.thread_crit_edge
+ br label %if.then.i
+
+mpath_parent.exit: ; preds = %land.rhs.i99.i, %land.rhs.i74.i.mpath_parent.exit_crit_edge
+ br i1 false, label %mstr_eq.exit.i, label %mpath_parent.exit.if.then.i_crit_edge
+
+mpath_parent.exit.if.then.i_crit_edge: ; preds = %mpath_parent.exit
+ br label %if.then.i
+
+mstr_eq.exit.i: ; preds = %mpath_parent.exit
+ br i1 false, label %_mstr_assert_.exit, label %mstr_eq.exit.i.if.then.i_crit_edge
+
+mstr_eq.exit.i.if.then.i_crit_edge: ; preds = %mstr_eq.exit.i
+ br label %if.then.i
+
+if.then.i: ; preds = %mstr_eq.exit.i.if.then.i_crit_edge, %mpath_parent.exit.if.then.i_crit_edge, %mpath_parent.exit.thread
+ unreachable
+
+_mstr_assert_.exit: ; preds = %mstr_eq.exit.i
+ br i1 false, label %mpath_parent.exit767, label %land.rhs.i.i735
+
+land.rhs.i.i735: ; preds = %_mstr_assert_.exit
+ br i1 false, label %while.body.i758, label %land.rhs.i84.i738
+
+land.rhs.i74.i764: ; preds = %while.body.i758
+ br i1 false, label %while.body.i758, label %land.rhs.i.i769
+
+while.body.i758: ; preds = %land.rhs.i74.i764, %land.rhs.i.i735
+ br i1 false, label %mpath_parent.exit767, label %land.rhs.i74.i764
+
+land.rhs.i84.i738: ; preds = %while.body4.i742, %land.rhs.i.i735
+ br i1 false, label %while.end6.i748, label %while.body4.i742
+
+while.body4.i742: ; preds = %land.rhs.i84.i738
+ br i1 false, label %mpath_parent.exit767, label %land.rhs.i84.i738
+
+while.end6.i748: ; preds = %land.rhs.i84.i738
+ br i1 false, label %land.rhs.i99.i751, label %land.rhs.i.i769
+
+land.rhs.i99.i751: ; preds = %while.body13.i755, %while.end6.i748
+ br i1 false, label %while.body13.i755, label %land.rhs.i.i769
+
+while.body13.i755: ; preds = %land.rhs.i99.i751
+ br i1 false, label %land.rhs.i99.i751, label %land.rhs.i.i769
+
+mpath_parent.exit767: ; preds = %while.body4.i742, %while.body.i758, %_mstr_assert_.exit
+ br label %mpath_parent.exit801.thread
+
+land.rhs.i.i769: ; preds = %while.body13.i755, %land.rhs.i99.i751, %while.end6.i748, %land.rhs.i74.i764
+ br i1 false, label %while.body.i792, label %land.rhs.i84.i772
+
+land.rhs.i74.i798: ; preds = %while.body.i792
+ br i1 false, label %while.body.i792, label %mpath_parent.exit801
+
+while.body.i792: ; preds = %land.rhs.i74.i798, %land.rhs.i.i769
+ br i1 false, label %mpath_parent.exit801.thread, label %land.rhs.i74.i798
+
+land.rhs.i84.i772: ; preds = %while.body4.i776, %land.rhs.i.i769
+ br i1 false, label %while.end6.i782, label %while.body4.i776
+
+while.body4.i776: ; preds = %land.rhs.i84.i772
+ br i1 false, label %mpath_parent.exit801.thread, label %land.rhs.i84.i772
+
+while.end6.i782: ; preds = %land.rhs.i84.i772
+ br i1 false, label %land.rhs.i99.i785, label %mpath_parent.exit801.thread
+
+land.rhs.i99.i785: ; preds = %while.body13.i789, %while.end6.i782
+ br i1 false, label %while.body13.i789, label %mpath_parent.exit801
+
+while.body13.i789: ; preds = %land.rhs.i99.i785
+ br i1 false, label %land.rhs.i99.i785, label %mpath_parent.exit801.thread
+
+mpath_parent.exit801.thread: ; preds = %while.body13.i789, %while.end6.i782, %while.body4.i776, %while.body.i792, %mpath_parent.exit767
+ br label %if.then.i804
+
+mpath_parent.exit801: ; preds = %land.rhs.i99.i785, %land.rhs.i74.i798
+ br i1 false, label %mstr_eq.exit.i806, label %if.then.i804
+
+mstr_eq.exit.i806: ; preds = %mpath_parent.exit801
+ br i1 false, label %land.rhs.i.i812, label %if.then.i804
+
+if.then.i804: ; preds = %mstr_eq.exit.i806, %mpath_parent.exit801, %mpath_parent.exit801.thread
+ unreachable
+
+land.rhs.i84.us.i: ; preds = %land.rhs.i.i812, %while.body4.us.i
+ switch i8 0, label %while.body4.us.i [
+ i8 92, label %while.end6.i817
+ i8 47, label %while.end6.i817
+ ]
+
+while.body4.us.i: ; preds = %land.rhs.i84.us.i
+ br i1 false, label %mpath_parent.exit820, label %land.rhs.i84.us.i
+
+land.rhs.i.i812: ; preds = %mstr_eq.exit.i806
+ br label %land.rhs.i84.us.i
+
+land.rhs.i74.us.i: ; preds = %while.body.us.i
+ %0 = insertvalue [2 x i32] %0, i32 0, 1
+ %path.coerce.fca.0.extract.i75.us.i = extractvalue [2 x i32] %0, 0
+ switch i8 0, label %mpath_parent.exit820 [
+ i8 92, label %while.body.us.i
+ i8 47, label %while.body.us.i
+ ]
+
+while.body.us.i: ; preds = %land.rhs.i74.us.i, %land.rhs.i74.us.i
+ br i1 false, label %mpath_parent.exit820, label %land.rhs.i74.us.i
+
+while.end6.i817: ; preds = %land.rhs.i84.us.i, %land.rhs.i84.us.i
+ br i1 false, label %land.rhs.i99.us.i, label %mpath_parent.exit820
+
+land.rhs.i99.us.i: ; preds = %while.body13.us.i, %while.end6.i817
+ switch i8 0, label %mpath_parent.exit820 [
+ i8 92, label %while.body13.us.i
+ i8 47, label %while.body13.us.i
+ ]
+
+while.body13.us.i: ; preds = %land.rhs.i99.us.i, %land.rhs.i99.us.i
+ br i1 false, label %land.rhs.i99.us.i, label %mpath_parent.exit820
+
+mpath_parent.exit820: ; preds = %while.body13.us.i, %land.rhs.i99.us.i, %while.end6.i817, %while.body.us.i, %land.rhs.i74.us.i, %while.body4.us.i
+ %path.coerce.fca.0.extract.sink.i814 = phi i32 [ 0, %while.end6.i817 ], [ %path.coerce.fca.0.extract.i75.us.i, %land.rhs.i74.us.i ], [ 0, %while.body.us.i ], [ 0, %while.body13.us.i ], [ 0, %land.rhs.i99.us.i ], [ 0, %while.body4.us.i ]
+ br i1 false, label %mstr_eq.exit.i826, label %if.then.i824
+
+mstr_eq.exit.i826: ; preds = %mpath_parent.exit820
+ br i1 false, label %land.rhs.i.i832, label %if.then.i824
+
+if.then.i824: ; preds = %mstr_eq.exit.i826, %mpath_parent.exit820
+ unreachable
+
+land.rhs.i.i832: ; preds = %mstr_eq.exit.i826
+ br label %land.rhs.i84.i835
+
+land.rhs.i84.i835: ; preds = %while.body4.i839, %land.rhs.i.i832
+ br i1 false, label %while.end6.i845, label %while.body4.i839
+
+while.body4.i839: ; preds = %land.rhs.i84.i835
+ br i1 false, label %if.then.i871, label %land.rhs.i84.i835
+
+while.end6.i845: ; preds = %land.rhs.i84.i835
+ br i1 false, label %land.rhs.i99.i848, label %land.rhs.i.i866
+
+land.rhs.i99.i848: ; preds = %while.body13.i852, %while.end6.i845
+ br i1 false, label %while.body13.i852, label %land.rhs.i.i866
+
+while.body13.i852: ; preds = %land.rhs.i99.i848
+ br i1 false, label %land.rhs.i99.i848, label %land.rhs.i.i866
+
+if.then.i871: ; preds = %while.body4.i839
+ br label %mpath_join.exit
+
+land.rhs.i.i866: ; preds = %while.body13.i852, %land.rhs.i99.i848, %while.end6.i845
+ br i1 false, label %if.then6.i.i.i, label %if.end9.i
+
+if.then6.i.i.i: ; preds = %land.rhs.i.i866
+ br label %mpath_join.exit
+
+if.end9.i: ; preds = %land.rhs.i.i866
+ br label %mpath_join.exit
+
+mpath_join.exit: ; preds = %if.end9.i, %if.then6.i.i.i, %if.then.i871
+ br i1 false, label %mstr_eq.exit.i879, label %if.then.i877
+
+mstr_eq.exit.i879: ; preds = %mpath_join.exit
+ br i1 false, label %_mstr_assert_.exit882, label %if.then.i877
+
+if.then.i877: ; preds = %mstr_eq.exit.i879, %mpath_join.exit
+ unreachable
+
+_mstr_assert_.exit882: ; preds = %mstr_eq.exit.i879
+ br i1 false, label %mpath_parent.exit917, label %land.rhs.i.i885
+
+land.rhs.i.i885: ; preds = %_mstr_assert_.exit882
+ br i1 false, label %while.body.i908, label %land.rhs.i84.i888
+
+land.rhs.i74.i914: ; preds = %while.body.i908
+ br i1 false, label %while.body.i908, label %mpath_parent.exit917
+
+while.body.i908: ; preds = %land.rhs.i74.i914, %land.rhs.i.i885
+ br i1 false, label %mpath_parent.exit917, label %land.rhs.i74.i914
+
+land.rhs.i84.i888: ; preds = %while.body4.i892, %land.rhs.i.i885
+ br i1 false, label %while.end6.i898, label %while.body4.i892
+
+while.body4.i892: ; preds = %land.rhs.i84.i888
+ br i1 false, label %mpath_parent.exit917, label %land.rhs.i84.i888
+
+while.end6.i898: ; preds = %land.rhs.i84.i888
+ br i1 false, label %land.rhs.i99.i901, label %mpath_parent.exit917
+
+land.rhs.i99.i901: ; preds = %while.body13.i905, %while.end6.i898
+ br i1 false, label %while.body13.i905, label %mpath_parent.exit917
+
+while.body13.i905: ; preds = %land.rhs.i99.i901
+ br i1 false, label %land.rhs.i99.i901, label %mpath_parent.exit917
+
+mpath_parent.exit917: ; preds = %while.body13.i905, %land.rhs.i99.i901, %while.end6.i898, %while.body4.i892, %while.body.i908, %land.rhs.i74.i914, %_mstr_assert_.exit882
+ br i1 false, label %mstr_eq.exit.i923, label %if.then.i921
+
+mstr_eq.exit.i923: ; preds = %mpath_parent.exit917
+ br i1 false, label %_mstr_assert_.exit926, label %if.then.i921
+
+if.then.i921: ; preds = %mstr_eq.exit.i923, %mpath_parent.exit917
+ unreachable
+
+_mstr_assert_.exit926: ; preds = %mstr_eq.exit.i923
+ br i1 false, label %mpath_parent.exit962, label %land.rhs.i.i930
+
+land.rhs.i.i930: ; preds = %_mstr_assert_.exit926
+ br i1 false, label %while.body.i953, label %land.rhs.i84.i933
+
+land.rhs.i74.i959: ; preds = %while.body.i953
+ br i1 false, label %while.body.i953, label %mpath_parent.exit962
+
+while.body.i953: ; preds = %land.rhs.i74.i959, %land.rhs.i.i930
+ br i1 false, label %mpath_parent.exit962, label %land.rhs.i74.i959
+
+land.rhs.i84.i933: ; preds = %while.body4.i937, %land.rhs.i.i930
+ br i1 false, label %while.end6.i943, label %while.body4.i937
+
+while.body4.i937: ; preds = %land.rhs.i84.i933
+ br i1 false, label %mpath_parent.exit962, label %land.rhs.i84.i933
+
+while.end6.i943: ; preds = %land.rhs.i84.i933
+ br i1 false, label %land.rhs.i99.i946, label %mpath_parent.exit962
+
+land.rhs.i99.i946: ; preds = %while.body13.i950, %while.end6.i943
+ br i1 false, label %while.body13.i950, label %mpath_parent.exit962
+
+while.body13.i950: ; preds = %land.rhs.i99.i946
+ br i1 false, label %land.rhs.i99.i946, label %mpath_parent.exit962
+
+mpath_parent.exit962: ; preds = %while.body13.i950, %land.rhs.i99.i946, %while.end6.i943, %while.body4.i937, %while.body.i953, %land.rhs.i74.i959, %_mstr_assert_.exit926
+ br i1 false, label %mstr_eq.exit.i968, label %if.then.i966
+
+mstr_eq.exit.i968: ; preds = %mpath_parent.exit962
+ br i1 false, label %_mstr_assert_.exit971, label %if.then.i966
+
+if.then.i966: ; preds = %mstr_eq.exit.i968, %mpath_parent.exit962
+ unreachable
+
+_mstr_assert_.exit971: ; preds = %mstr_eq.exit.i968
+ br i1 false, label %mpath_parent.exit1007, label %land.rhs.i.i975
+
+land.rhs.i.i975: ; preds = %_mstr_assert_.exit971
+ br i1 false, label %while.body.i998, label %land.rhs.i84.i978
+
+land.rhs.i74.i1004: ; preds = %while.body.i998
+ br i1 false, label %while.body.i998, label %mpath_parent.exit1007
+
+while.body.i998: ; preds = %land.rhs.i74.i1004, %land.rhs.i.i975
+ br i1 false, label %mpath_parent.exit1007, label %land.rhs.i74.i1004
+
+land.rhs.i84.i978: ; preds = %while.body4.i982, %land.rhs.i.i975
+ br i1 false, label %while.end6.i988, label %while.body4.i982
+
+while.body4.i982: ; preds = %land.rhs.i84.i978
+ br i1 false, label %mpath_parent.exit1007, label %land.rhs.i84.i978
+
+while.end6.i988: ; preds = %land.rhs.i84.i978
+ br i1 false, label %land.rhs.i99.i991, label %mpath_parent.exit1007
+
+land.rhs.i99.i991: ; preds = %while.body13.i995, %while.end6.i988
+ br i1 false, label %while.body13.i995, label %mpath_parent.exit1007
+
+while.body13.i995: ; preds = %land.rhs.i99.i991
+ br i1 false, label %land.rhs.i99.i991, label %mpath_parent.exit1007
+
+mpath_parent.exit1007: ; preds = %while.body13.i995, %land.rhs.i99.i991, %while.end6.i988, %while.body4.i982, %while.body.i998, %land.rhs.i74.i1004, %_mstr_assert_.exit971
+ br i1 false, label %mstr_eq.exit.i1013, label %if.then.i1011
+
+mstr_eq.exit.i1013: ; preds = %mpath_parent.exit1007
+ br i1 false, label %_mstr_assert_.exit1016, label %if.then.i1011
+
+if.then.i1011: ; preds = %mstr_eq.exit.i1013, %mpath_parent.exit1007
+ unreachable
+
+_mstr_assert_.exit1016: ; preds = %mstr_eq.exit.i1013
+ br i1 false, label %mpath_parent.exit1052, label %land.rhs.i.i1020
+
+land.rhs.i.i1020: ; preds = %_mstr_assert_.exit1016
+ br i1 false, label %while.body.i1043, label %land.rhs.i84.i1023
+
+land.rhs.i74.i1049: ; preds = %while.body.i1043
+ br i1 false, label %while.body.i1043, label %mpath_parent.exit1052
+
+while.body.i1043: ; preds = %land.rhs.i74.i1049, %land.rhs.i.i1020
+ br i1 false, label %mpath_parent.exit1052, label %land.rhs.i74.i1049
+
+land.rhs.i84.i1023: ; preds = %while.body4.i1027, %land.rhs.i.i1020
+ br i1 false, label %while.end6.i1033, label %while.body4.i1027
+
+while.body4.i1027: ; preds = %land.rhs.i84.i1023
+ br i1 false, label %mpath_parent.exit1052, label %land.rhs.i84.i1023
+
+while.end6.i1033: ; preds = %land.rhs.i84.i1023
+ br i1 false, label %land.rhs.i99.i1036, label %mpath_parent.exit1052
+
+land.rhs.i99.i1036: ; preds = %while.body13.i1040, %while.end6.i1033
+ br i1 false, label %while.body13.i1040, label %mpath_parent.exit1052
+
+while.body13.i1040: ; preds = %land.rhs.i99.i1036
+ br i1 false, label %land.rhs.i99.i1036, label %mpath_parent.exit1052
+
+mpath_parent.exit1052: ; preds = %while.body13.i1040, %land.rhs.i99.i1036, %while.end6.i1033, %while.body4.i1027, %while.body.i1043, %land.rhs.i74.i1049, %_mstr_assert_.exit1016
+ br i1 false, label %mstr_eq.exit.i1058, label %if.then.i1056
+
+mstr_eq.exit.i1058: ; preds = %mpath_parent.exit1052
+ br i1 false, label %_mstr_assert_.exit1061, label %if.then.i1056
+
+if.then.i1056: ; preds = %mstr_eq.exit.i1058, %mpath_parent.exit1052
+ unreachable
+
+_mstr_assert_.exit1061: ; preds = %mstr_eq.exit.i1058
+ br i1 false, label %mpath_parent.exit1097, label %land.rhs.i.i1065
+
+land.rhs.i.i1065: ; preds = %_mstr_assert_.exit1061
+ br i1 false, label %while.body.i1088, label %land.rhs.i84.i1068
+
+land.rhs.i74.i1094: ; preds = %while.body.i1088
+ br i1 false, label %while.body.i1088, label %mpath_parent.exit1097
+
+while.body.i1088: ; preds = %land.rhs.i74.i1094, %land.rhs.i.i1065
+ br i1 false, label %mpath_parent.exit1097, label %land.rhs.i74.i1094
+
+land.rhs.i84.i1068: ; preds = %while.body4.i1072, %land.rhs.i.i1065
+ br i1 false, label %while.end6.i1078, label %while.body4.i1072
+
+while.body4.i1072: ; preds = %land.rhs.i84.i1068
+ br i1 false, label %mpath_parent.exit1097, label %land.rhs.i84.i1068
+
+while.end6.i1078: ; preds = %land.rhs.i84.i1068
+ br i1 false, label %land.rhs.i99.i1081, label %mpath_parent.exit1097
+
+land.rhs.i99.i1081: ; preds = %while.body13.i1085, %while.end6.i1078
+ br i1 false, label %while.body13.i1085, label %mpath_parent.exit1097
+
+while.body13.i1085: ; preds = %land.rhs.i99.i1081
+ br i1 false, label %land.rhs.i99.i1081, label %mpath_parent.exit1097
+
+mpath_parent.exit1097: ; preds = %while.body13.i1085, %land.rhs.i99.i1081, %while.end6.i1078, %while.body4.i1072, %while.body.i1088, %land.rhs.i74.i1094, %_mstr_assert_.exit1061
+ br i1 false, label %mstr_eq.exit.i1103, label %if.then.i1101
+
+mstr_eq.exit.i1103: ; preds = %mpath_parent.exit1097
+ br i1 false, label %_mstr_assert_.exit1106, label %if.then.i1101
+
+if.then.i1101: ; preds = %mstr_eq.exit.i1103, %mpath_parent.exit1097
+ unreachable
+
+_mstr_assert_.exit1106: ; preds = %mstr_eq.exit.i1103
+ br i1 false, label %mpath_parent.exit1142, label %land.rhs.i.i1110
+
+land.rhs.i.i1110: ; preds = %_mstr_assert_.exit1106
+ br i1 false, label %while.body.i1133, label %land.rhs.i84.i1113
+
+land.rhs.i74.i1139: ; preds = %while.body.i1133
+ br i1 false, label %while.body.i1133, label %mpath_parent.exit1142
+
+while.body.i1133: ; preds = %land.rhs.i74.i1139, %land.rhs.i.i1110
+ br i1 false, label %mpath_parent.exit1142, label %land.rhs.i74.i1139
+
+land.rhs.i84.i1113: ; preds = %while.body4.i1117, %land.rhs.i.i1110
+ br i1 false, label %while.end6.i1123, label %while.body4.i1117
+
+while.body4.i1117: ; preds = %land.rhs.i84.i1113
+ br i1 false, label %mpath_parent.exit1142, label %land.rhs.i84.i1113
+
+while.end6.i1123: ; preds = %land.rhs.i84.i1113
+ br i1 false, label %land.rhs.i99.i1126, label %mpath_parent.exit1142
+
+land.rhs.i99.i1126: ; preds = %while.body13.i1130, %while.end6.i1123
+ br i1 false, label %while.body13.i1130, label %mpath_parent.exit1142
+
+while.body13.i1130: ; preds = %land.rhs.i99.i1126
+ br i1 false, label %land.rhs.i99.i1126, label %mpath_parent.exit1142
+
+mpath_parent.exit1142: ; preds = %while.body13.i1130, %land.rhs.i99.i1126, %while.end6.i1123, %while.body4.i1117, %while.body.i1133, %land.rhs.i74.i1139, %_mstr_assert_.exit1106
+ br i1 false, label %mstr_eq.exit.i1148, label %if.then.i1146
+
+mstr_eq.exit.i1148: ; preds = %mpath_parent.exit1142
+ br i1 false, label %_mstr_assert_.exit1151, label %if.then.i1146
+
+if.then.i1146: ; preds = %mstr_eq.exit.i1148, %mpath_parent.exit1142
+ unreachable
+
+_mstr_assert_.exit1151: ; preds = %mstr_eq.exit.i1148
+ br i1 false, label %mpath_parent.exit1187, label %land.rhs.i.i1155
+
+land.rhs.i.i1155: ; preds = %_mstr_assert_.exit1151
+ br i1 false, label %while.body.i1178, label %land.rhs.i84.i1158
+
+land.rhs.i74.i1184: ; preds = %while.body.i1178
+ br i1 false, label %while.body.i1178, label %mpath_parent.exit1187
+
+while.body.i1178: ; preds = %land.rhs.i74.i1184, %land.rhs.i.i1155
+ br i1 false, label %mpath_parent.exit1187, label %land.rhs.i74.i1184
+
+land.rhs.i84.i1158: ; preds = %while.body4.i1162, %land.rhs.i.i1155
+ br i1 false, label %while.end6.i1168, label %while.body4.i1162
+
+while.body4.i1162: ; preds = %land.rhs.i84.i1158
+ br i1 false, label %mpath_parent.exit1187, label %land.rhs.i84.i1158
+
+while.end6.i1168: ; preds = %land.rhs.i84.i1158
+ br i1 false, label %land.rhs.i99.i1171, label %mpath_parent.exit1187
+
+land.rhs.i99.i1171: ; preds = %while.body13.i1175, %while.end6.i1168
+ br i1 false, label %while.body13.i1175, label %mpath_parent.exit1187
+
+while.body13.i1175: ; preds = %land.rhs.i99.i1171
+ br i1 false, label %land.rhs.i99.i1171, label %mpath_parent.exit1187
+
+mpath_parent.exit1187: ; preds = %while.body13.i1175, %land.rhs.i99.i1171, %while.end6.i1168, %while.body4.i1162, %while.body.i1178, %land.rhs.i74.i1184, %_mstr_assert_.exit1151
+ br i1 false, label %mstr_eq.exit.i1193, label %if.then.i1191
+
+mstr_eq.exit.i1193: ; preds = %mpath_parent.exit1187
+ br i1 false, label %_mstr_assert_.exit1196, label %if.then.i1191
+
+if.then.i1191: ; preds = %mstr_eq.exit.i1193, %mpath_parent.exit1187
+ unreachable
+
+_mstr_assert_.exit1196: ; preds = %mstr_eq.exit.i1193
+ br i1 false, label %mpath_parent.exit1232, label %land.rhs.i.i1200
+
+land.rhs.i.i1200: ; preds = %_mstr_assert_.exit1196
+ br i1 false, label %while.body.i1223, label %land.rhs.i84.i1203
+
+land.rhs.i74.i1229: ; preds = %while.body.i1223
+ br i1 false, label %while.body.i1223, label %mpath_parent.exit1232
+
+while.body.i1223: ; preds = %land.rhs.i74.i1229, %land.rhs.i.i1200
+ br i1 false, label %mpath_parent.exit1232, label %land.rhs.i74.i1229
+
+land.rhs.i84.i1203: ; preds = %while.body4.i1207, %land.rhs.i.i1200
+ br i1 false, label %while.end6.i1213, label %while.body4.i1207
+
+while.body4.i1207: ; preds = %land.rhs.i84.i1203
+ br i1 false, label %mpath_parent.exit1232, label %land.rhs.i84.i1203
+
+while.end6.i1213: ; preds = %land.rhs.i84.i1203
+ br i1 false, label %land.rhs.i99.i1216, label %mpath_parent.exit1232
+
+land.rhs.i99.i1216: ; preds = %while.body13.i1220, %while.end6.i1213
+ br i1 false, label %while.body13.i1220, label %mpath_parent.exit1232
+
+while.body13.i1220: ; preds = %land.rhs.i99.i1216
+ br i1 false, label %land.rhs.i99.i1216, label %mpath_parent.exit1232
+
+mpath_parent.exit1232: ; preds = %while.body13.i1220, %land.rhs.i99.i1216, %while.end6.i1213, %while.body4.i1207, %while.body.i1223, %land.rhs.i74.i1229, %_mstr_assert_.exit1196
+ br i1 false, label %mstr_eq.exit.i1238, label %if.then.i1236
+
+mstr_eq.exit.i1238: ; preds = %mpath_parent.exit1232
+ br i1 false, label %_mstr_assert_.exit1241, label %if.then.i1236
+
+if.then.i1236: ; preds = %mstr_eq.exit.i1238, %mpath_parent.exit1232
+ unreachable
+
+_mstr_assert_.exit1241: ; preds = %mstr_eq.exit.i1238
+ br i1 false, label %mpath_parent.exit1277, label %land.rhs.i.i1245
+
+land.rhs.i.i1245: ; preds = %_mstr_assert_.exit1241
+ br i1 false, label %while.body.i1268, label %land.rhs.i84.i1248
+
+land.rhs.i74.i1274: ; preds = %while.body.i1268
+ br i1 false, label %while.body.i1268, label %mpath_parent.exit1277
+
+while.body.i1268: ; preds = %land.rhs.i74.i1274, %land.rhs.i.i1245
+ br i1 false, label %mpath_parent.exit1277, label %land.rhs.i74.i1274
+
+land.rhs.i84.i1248: ; preds = %while.body4.i1252, %land.rhs.i.i1245
+ br i1 false, label %while.end6.i1258, label %while.body4.i1252
+
+while.body4.i1252: ; preds = %land.rhs.i84.i1248
+ br i1 false, label %mpath_parent.exit1277, label %land.rhs.i84.i1248
+
+while.end6.i1258: ; preds = %land.rhs.i84.i1248
+ br i1 false, label %land.rhs.i99.i1261, label %mpath_parent.exit1277
+
+land.rhs.i99.i1261: ; preds = %while.body13.i1265, %while.end6.i1258
+ br i1 false, label %while.body13.i1265, label %mpath_parent.exit1277
+
+while.body13.i1265: ; preds = %land.rhs.i99.i1261
+ br i1 false, label %land.rhs.i99.i1261, label %mpath_parent.exit1277
+
+mpath_parent.exit1277: ; preds = %while.body13.i1265, %land.rhs.i99.i1261, %while.end6.i1258, %while.body4.i1252, %while.body.i1268, %land.rhs.i74.i1274, %_mstr_assert_.exit1241
+ br i1 false, label %mstr_eq.exit.i1283, label %if.then.i1281
+
+mstr_eq.exit.i1283: ; preds = %mpath_parent.exit1277
+ br i1 false, label %_mstr_assert_.exit1286, label %if.then.i1281
+
+if.then.i1281: ; preds = %mstr_eq.exit.i1283, %mpath_parent.exit1277
+ unreachable
+
+_mstr_assert_.exit1286: ; preds = %mstr_eq.exit.i1283
+ br i1 false, label %mpath_parent.exit1322, label %land.rhs.i.i1290
+
+land.rhs.i.i1290: ; preds = %_mstr_assert_.exit1286
+ br i1 false, label %while.body.i1313, label %land.rhs.i84.i1293
+
+land.rhs.i74.i1319: ; preds = %while.body.i1313
+ br i1 false, label %while.body.i1313, label %mpath_parent.exit1322
+
+while.body.i1313: ; preds = %land.rhs.i74.i1319, %land.rhs.i.i1290
+ br i1 false, label %mpath_parent.exit1322, label %land.rhs.i74.i1319
+
+land.rhs.i84.i1293: ; preds = %while.body4.i1297, %land.rhs.i.i1290
+ br i1 false, label %while.end6.i1303, label %while.body4.i1297
+
+while.body4.i1297: ; preds = %land.rhs.i84.i1293
+ br i1 false, label %mpath_parent.exit1322, label %land.rhs.i84.i1293
+
+while.end6.i1303: ; preds = %land.rhs.i84.i1293
+ br i1 false, label %land.rhs.i99.i1306, label %mpath_parent.exit1322
+
+land.rhs.i99.i1306: ; preds = %while.body13.i1310, %while.end6.i1303
+ br i1 false, label %while.body13.i1310, label %mpath_parent.exit1322
+
+while.body13.i1310: ; preds = %land.rhs.i99.i1306
+ br i1 false, label %land.rhs.i99.i1306, label %mpath_parent.exit1322
+
+mpath_parent.exit1322: ; preds = %while.body13.i1310, %land.rhs.i99.i1306, %while.end6.i1303, %while.body4.i1297, %while.body.i1313, %land.rhs.i74.i1319, %_mstr_assert_.exit1286
+ br i1 false, label %mstr_eq.exit.i1328, label %if.then.i1326
+
+mstr_eq.exit.i1328: ; preds = %mpath_parent.exit1322
+ br i1 false, label %_mstr_assert_.exit1331, label %if.then.i1326
+
+if.then.i1326: ; preds = %mstr_eq.exit.i1328, %mpath_parent.exit1322
+ unreachable
+
+_mstr_assert_.exit1331: ; preds = %mstr_eq.exit.i1328
+ br i1 false, label %mpath_parent.exit1367, label %land.rhs.i.i1335
+
+land.rhs.i.i1335: ; preds = %_mstr_assert_.exit1331
+ br i1 false, label %while.body.i1358, label %land.rhs.i84.i1338
+
+land.rhs.i74.i1364: ; preds = %while.body.i1358
+ br i1 false, label %while.body.i1358, label %mpath_parent.exit1367
+
+while.body.i1358: ; preds = %land.rhs.i74.i1364, %land.rhs.i.i1335
+ br i1 false, label %mpath_parent.exit1367, label %land.rhs.i74.i1364
+
+land.rhs.i84.i1338: ; preds = %while.body4.i1342, %land.rhs.i.i1335
+ br i1 false, label %while.end6.i1348, label %while.body4.i1342
+
+while.body4.i1342: ; preds = %land.rhs.i84.i1338
+ br i1 false, label %mpath_parent.exit1367, label %land.rhs.i84.i1338
+
+while.end6.i1348: ; preds = %land.rhs.i84.i1338
+ br i1 false, label %land.rhs.i99.i1351, label %mpath_parent.exit1367
+
+land.rhs.i99.i1351: ; preds = %while.body13.i1355, %while.end6.i1348
+ br i1 false, label %while.body13.i1355, label %mpath_parent.exit1367
+
+while.body13.i1355: ; preds = %land.rhs.i99.i1351
+ br i1 false, label %land.rhs.i99.i1351, label %mpath_parent.exit1367
+
+mpath_parent.exit1367: ; preds = %while.body13.i1355, %land.rhs.i99.i1351, %while.end6.i1348, %while.body4.i1342, %while.body.i1358, %land.rhs.i74.i1364, %_mstr_assert_.exit1331
+ br i1 false, label %mstr_eq.exit.i1373, label %if.then.i1371
+
+mstr_eq.exit.i1373: ; preds = %mpath_parent.exit1367
+ br i1 false, label %_mstr_assert_.exit1376, label %if.then.i1371
+
+if.then.i1371: ; preds = %mstr_eq.exit.i1373, %mpath_parent.exit1367
+ unreachable
+
+_mstr_assert_.exit1376: ; preds = %mstr_eq.exit.i1373
+ br i1 false, label %mpath_filename.exit, label %if.end.i
+
+if.end.i: ; preds = %_mstr_assert_.exit1376
+ br label %while.cond.i
+
+while.cond.i: ; preds = %land.rhs.i, %if.end.i
+ br i1 false, label %while.end.i, label %land.rhs.i
+
+land.rhs.i: ; preds = %while.cond.i
+ br i1 false, label %while.end.i, label %while.cond.i
+
+while.end.i: ; preds = %land.rhs.i, %while.cond.i
+ br i1 false, label %mpath_filename.exit, label %if.end8.i
+
+if.end8.i: ; preds = %while.end.i
+ br label %mpath_filename.exit
+
+mpath_filename.exit: ; preds = %if.end8.i, %while.end.i, %_mstr_assert_.exit1376
+ br i1 false, label %mstr_eq.exit.i1391, label %if.then.i1389
+
+mstr_eq.exit.i1391: ; preds = %mpath_filename.exit
+ br i1 false, label %_mstr_assert_.exit1394, label %if.then.i1389
+
+if.then.i1389: ; preds = %mstr_eq.exit.i1391, %mpath_filename.exit
+ unreachable
+
+_mstr_assert_.exit1394: ; preds = %mstr_eq.exit.i1391
+ br i1 false, label %mpath_filename.exit1419, label %if.end.i1398
+
+if.end.i1398: ; preds = %_mstr_assert_.exit1394
+ br label %while.cond.i1400
+
+while.cond.i1400: ; preds = %land.rhs.i1403, %if.end.i1398
+ br i1 false, label %while.end.i1406, label %land.rhs.i1403
+
+land.rhs.i1403: ; preds = %while.cond.i1400
+ br i1 false, label %while.end.i1406, label %while.cond.i1400
+
+while.end.i1406: ; preds = %land.rhs.i1403, %while.cond.i1400
+ br i1 false, label %mpath_filename.exit1419, label %if.end8.i1411
+
+if.end8.i1411: ; preds = %while.end.i1406
+ br label %mpath_filename.exit1419
+
+mpath_filename.exit1419: ; preds = %if.end8.i1411, %while.end.i1406, %_mstr_assert_.exit1394
+ br i1 false, label %mstr_eq.exit.i1425, label %if.then.i1423
+
+mstr_eq.exit.i1425: ; preds = %mpath_filename.exit1419
+ br i1 false, label %_mstr_assert_.exit1428, label %if.then.i1423
+
+if.then.i1423: ; preds = %mstr_eq.exit.i1425, %mpath_filename.exit1419
+ unreachable
+
+_mstr_assert_.exit1428: ; preds = %mstr_eq.exit.i1425
+ br i1 false, label %mpath_filename.exit1453, label %if.end.i1432
+
+if.end.i1432: ; preds = %_mstr_assert_.exit1428
+ br label %while.cond.i1434
+
+while.cond.i1434: ; preds = %land.rhs.i1437, %if.end.i1432
+ br i1 false, label %while.end.i1440, label %land.rhs.i1437
+
+land.rhs.i1437: ; preds = %while.cond.i1434
+ br i1 false, label %while.end.i1440, label %while.cond.i1434
+
+while.end.i1440: ; preds = %land.rhs.i1437, %while.cond.i1434
+ br i1 false, label %mpath_filename.exit1453, label %if.end8.i1445
+
+if.end8.i1445: ; preds = %while.end.i1440
+ br label %mpath_filename.exit1453
+
+mpath_filename.exit1453: ; preds = %if.end8.i1445, %while.end.i1440, %_mstr_assert_.exit1428
+ br i1 false, label %mstr_eq.exit.i1459, label %if.then.i1457
+
+mstr_eq.exit.i1459: ; preds = %mpath_filename.exit1453
+ br i1 false, label %_mstr_assert_.exit1462, label %if.then.i1457
+
+if.then.i1457: ; preds = %mstr_eq.exit.i1459, %mpath_filename.exit1453
+ unreachable
+
+_mstr_assert_.exit1462: ; preds = %mstr_eq.exit.i1459
+ br i1 false, label %mpath_filename.exit1487, label %if.end.i1466
+
+if.end.i1466: ; preds = %_mstr_assert_.exit1462
+ br label %while.cond.i1468
+
+while.cond.i1468: ; preds = %land.rhs.i1471, %if.end.i1466
+ br i1 false, label %while.end.i1474, label %land.rhs.i1471
+
+land.rhs.i1471: ; preds = %while.cond.i1468
+ br i1 false, label %while.end.i1474, label %while.cond.i1468
+
+while.end.i1474: ; preds = %land.rhs.i1471, %while.cond.i1468
+ br i1 false, label %mpath_filename.exit1487, label %if.end8.i1479
+
+if.end8.i1479: ; preds = %while.end.i1474
+ br label %mpath_filename.exit1487
+
+mpath_filename.exit1487: ; preds = %if.end8.i1479, %while.end.i1474, %_mstr_assert_.exit1462
+ br i1 false, label %mstr_eq.exit.i1493, label %if.then.i1491
+
+mstr_eq.exit.i1493: ; preds = %mpath_filename.exit1487
+ br i1 false, label %_mstr_assert_.exit1496, label %if.then.i1491
+
+if.then.i1491: ; preds = %mstr_eq.exit.i1493, %mpath_filename.exit1487
+ unreachable
+
+_mstr_assert_.exit1496: ; preds = %mstr_eq.exit.i1493
+ br i1 false, label %mpath_filename.exit1521, label %if.end.i1500
+
+if.end.i1500: ; preds = %_mstr_assert_.exit1496
+ br label %while.cond.i1502
+
+while.cond.i1502: ; preds = %land.rhs.i1505, %if.end.i1500
+ br i1 false, label %while.end.i1508, label %land.rhs.i1505
+
+land.rhs.i1505: ; preds = %while.cond.i1502
+ br i1 false, label %while.end.i1508, label %while.cond.i1502
+
+while.end.i1508: ; preds = %land.rhs.i1505, %while.cond.i1502
+ br i1 false, label %mpath_filename.exit1521, label %if.end8.i1513
+
+if.end8.i1513: ; preds = %while.end.i1508
+ br label %mpath_filename.exit1521
+
+mpath_filename.exit1521: ; preds = %if.end8.i1513, %while.end.i1508, %_mstr_assert_.exit1496
+ br i1 false, label %mstr_eq.exit.i1527, label %if.then.i1525
+
+mstr_eq.exit.i1527: ; preds = %mpath_filename.exit1521
+ br i1 false, label %_mstr_assert_.exit1530, label %if.then.i1525
+
+if.then.i1525: ; preds = %mstr_eq.exit.i1527, %mpath_filename.exit1521
+ unreachable
+
+_mstr_assert_.exit1530: ; preds = %mstr_eq.exit.i1527
+ br i1 false, label %mpath_filename.exit1555, label %if.end.i1534
+
+if.end.i1534: ; preds = %_mstr_assert_.exit1530
+ br label %while.cond.i1536
+
+while.cond.i1536: ; preds = %land.rhs.i1539, %if.end.i1534
+ br i1 false, label %while.end.i1542, label %land.rhs.i1539
+
+land.rhs.i1539: ; preds = %while.cond.i1536
+ br i1 false, label %while.end.i1542, label %while.cond.i1536
+
+while.end.i1542: ; preds = %land.rhs.i1539, %while.cond.i1536
+ br i1 false, label %mpath_filename.exit1555, label %if.end8.i1547
+
+if.end8.i1547: ; preds = %while.end.i1542
+ br label %mpath_filename.exit1555
+
+mpath_filename.exit1555: ; preds = %if.end8.i1547, %while.end.i1542, %_mstr_assert_.exit1530
+ br i1 false, label %mstr_eq.exit.i1561, label %if.then.i1559
+
+mstr_eq.exit.i1561: ; preds = %mpath_filename.exit1555
+ br i1 false, label %_mstr_assert_.exit1564, label %if.then.i1559
+
+if.then.i1559: ; preds = %mstr_eq.exit.i1561, %mpath_filename.exit1555
+ unreachable
+
+_mstr_assert_.exit1564: ; preds = %mstr_eq.exit.i1561
+ br i1 false, label %mpath_filename.exit1589, label %if.end.i1568
+
+if.end.i1568: ; preds = %_mstr_assert_.exit1564
+ br label %while.cond.i1570
+
+while.cond.i1570: ; preds = %land.rhs.i1573, %if.end.i1568
+ br i1 false, label %while.end.i1576, label %land.rhs.i1573
+
+land.rhs.i1573: ; preds = %while.cond.i1570
+ br i1 false, label %while.end.i1576, label %while.cond.i1570
+
+while.end.i1576: ; preds = %land.rhs.i1573, %while.cond.i1570
+ br i1 false, label %mpath_filename.exit1589, label %if.end8.i1581
+
+if.end8.i1581: ; preds = %while.end.i1576
+ br label %mpath_filename.exit1589
+
+mpath_filename.exit1589: ; preds = %if.end8.i1581, %while.end.i1576, %_mstr_assert_.exit1564
+ br i1 false, label %mstr_eq.exit.i1595, label %if.then.i1593
+
+mstr_eq.exit.i1595: ; preds = %mpath_filename.exit1589
+ br i1 false, label %_mstr_assert_.exit1598, label %if.then.i1593
+
+if.then.i1593: ; preds = %mstr_eq.exit.i1595, %mpath_filename.exit1589
+ unreachable
+
+_mstr_assert_.exit1598: ; preds = %mstr_eq.exit.i1595
+ br i1 false, label %mpath_filename.exit1623, label %if.end.i1602
+
+if.end.i1602: ; preds = %_mstr_assert_.exit1598
+ br label %while.cond.i1604
+
+while.cond.i1604: ; preds = %land.rhs.i1607, %if.end.i1602
+ br i1 false, label %while.end.i1610, label %land.rhs.i1607
+
+land.rhs.i1607: ; preds = %while.cond.i1604
+ br i1 false, label %while.end.i1610, label %while.cond.i1604
+
+while.end.i1610: ; preds = %land.rhs.i1607, %while.cond.i1604
+ br i1 false, label %mpath_filename.exit1623, label %if.end8.i1615
+
+if.end8.i1615: ; preds = %while.end.i1610
+ br label %mpath_filename.exit1623
+
+mpath_filename.exit1623: ; preds = %if.end8.i1615, %while.end.i1610, %_mstr_assert_.exit1598
+ br i1 false, label %mstr_eq.exit.i1629, label %if.then.i1627
+
+mstr_eq.exit.i1629: ; preds = %mpath_filename.exit1623
+ br i1 false, label %_mstr_assert_.exit1632, label %if.then.i1627
+
+if.then.i1627: ; preds = %mstr_eq.exit.i1629, %mpath_filename.exit1623
+ unreachable
+
+_mstr_assert_.exit1632: ; preds = %mstr_eq.exit.i1629
+ br i1 false, label %mstr_eq.exit.i1645, label %if.then.i1643
+
+mstr_eq.exit.i1645: ; preds = %_mstr_assert_.exit1632
+ br i1 false, label %_mstr_assert_.exit1648, label %if.then.i1643
+
+if.then.i1643: ; preds = %mstr_eq.exit.i1645, %_mstr_assert_.exit1632
+ unreachable
+
+_mstr_assert_.exit1648: ; preds = %mstr_eq.exit.i1645
+ br i1 false, label %mstr_eq.exit.i1672, label %if.then.i1670
+
+mstr_eq.exit.i1672: ; preds = %_mstr_assert_.exit1648
+ br i1 false, label %_mstr_assert_.exit1675, label %if.then.i1670
+
+if.then.i1670: ; preds = %mstr_eq.exit.i1672, %_mstr_assert_.exit1648
+ unreachable
+
+_mstr_assert_.exit1675: ; preds = %mstr_eq.exit.i1672
+ br i1 false, label %mstr_eq.exit.i1699, label %if.then.i1697
+
+mstr_eq.exit.i1699: ; preds = %_mstr_assert_.exit1675
+ br i1 false, label %_mstr_assert_.exit1702, label %if.then.i1697
+
+if.then.i1697: ; preds = %mstr_eq.exit.i1699, %_mstr_assert_.exit1675
+ unreachable
+
+_mstr_assert_.exit1702: ; preds = %mstr_eq.exit.i1699
+ br i1 false, label %mstr_eq.exit.i1726, label %if.then.i1724
+
+mstr_eq.exit.i1726: ; preds = %_mstr_assert_.exit1702
+ br i1 false, label %_mstr_assert_.exit1729, label %if.then.i1724
+
+if.then.i1724: ; preds = %mstr_eq.exit.i1726, %_mstr_assert_.exit1702
+ unreachable
+
+_mstr_assert_.exit1729: ; preds = %mstr_eq.exit.i1726
+ br i1 false, label %mstr_eq.exit.i1753, label %if.then.i1751
+
+mstr_eq.exit.i1753: ; preds = %_mstr_assert_.exit1729
+ br i1 false, label %_mstr_assert_.exit1756, label %if.then.i1751
+
+if.then.i1751: ; preds = %mstr_eq.exit.i1753, %_mstr_assert_.exit1729
+ unreachable
+
+_mstr_assert_.exit1756: ; preds = %mstr_eq.exit.i1753
+ ret i32 0
+
+; uselistorder directives
+ uselistorder [2 x i32] %0, { 1, 0 }
+}
+
+; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
+declare void @llvm.lifetime.start.p0(ptr captures(none)) #0
+
+; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
+declare void @llvm.lifetime.end.p0(ptr captures(none)) #0
+
+; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
+declare void @llvm.memcpy.p0.p0.i32(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i32, i1 immarg) #1
+
+; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
+declare void @llvm.experimental.noalias.scope.decl(metadata) #2
+
+; Function Attrs: nocallback nocreateundeforpoison nofree nosync nounwind speculatable willreturn memory(none)
+declare i32 @llvm.umin.i32(i32, i32) #3
+
+attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
+attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
+attributes #2 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
+attributes #3 = { nocallback nocreateundeforpoison nofree nosync nounwind speculatable willreturn memory(none) }
>From 74ed28c8ce68b1f6e98da0b4808f5aafdb0f9fcd Mon Sep 17 00:00:00 2001
From: Sharjeel Khan <sharjeelkhan at google.com>
Date: Thu, 2 Apr 2026 23:00:19 +0000
Subject: [PATCH 03/10] Fix comment
---
llvm/lib/Analysis/InstructionSimplify.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index 4c5eeb5e51853..068c05564d610 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -5467,7 +5467,7 @@ static Value *simplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
}
// Based on the verifier, self-referential insertvalues are apparently
- // fine in unreachable blocks and they will cause this loop to run in
+ // fine in unreachable blocks and they will cause this loop to run
// infinitely. I am just adding a check to break out if it is the case.
auto *newIVI = dyn_cast<InsertValueInst>(IVI->getAggregateOperand());
if (IVI == newIVI)
>From 81344900e3f9d2ac45478fe7caff816e3f03cddb Mon Sep 17 00:00:00 2001
From: Sharjeel Khan <sharjeelkhan at google.com>
Date: Thu, 2 Apr 2026 23:03:37 +0000
Subject: [PATCH 04/10] Fix clang-format
---
llvm/lib/Analysis/InstructionSimplify.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index 068c05564d610..7937f59456581 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -5465,7 +5465,7 @@ static Value *simplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
return IVI->getInsertedValueOperand();
break;
}
-
+
// Based on the verifier, self-referential insertvalues are apparently
// fine in unreachable blocks and they will cause this loop to run
// infinitely. I am just adding a check to break out if it is the case.
>From 969c519e093156aac264cf84013942cc1bc74c7e Mon Sep 17 00:00:00 2001
From: Sharjeel Khan <sharjeelkhan at google.com>
Date: Sun, 5 Apr 2026 02:17:38 +0000
Subject: [PATCH 05/10] Fix based on review comments
---
llvm/lib/Analysis/InstructionSimplify.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index 7937f59456581..51ae63bfbe0e2 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -5469,10 +5469,10 @@ static Value *simplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
// Based on the verifier, self-referential insertvalues are apparently
// fine in unreachable blocks and they will cause this loop to run
// infinitely. I am just adding a check to break out if it is the case.
- auto *newIVI = dyn_cast<InsertValueInst>(IVI->getAggregateOperand());
- if (IVI == newIVI)
+ auto *NewIVI = dyn_cast<InsertValueInst>(IVI->getAggregateOperand());
+ if (IVI == NewIVI)
break;
- IVI = newIVI;
+ IVI = NewIVI;
}
// Simplify umul_with_overflow where one operand is 1.
>From 20c424c02b4703a68fdd88300bc38f2bbaafbfb6 Mon Sep 17 00:00:00 2001
From: Sharjeel Khan <sharjeelkhan at google.com>
Date: Sun, 5 Apr 2026 02:53:53 +0000
Subject: [PATCH 06/10] Reduced the test case
---
.../CorrelatedValuePropagation/pr187381.ll | 1461 +----------------
1 file changed, 6 insertions(+), 1455 deletions(-)
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll b/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
index 8e259f75bf9ea..342491611011b 100644
--- a/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
@@ -3,100 +3,8 @@
define i32 @main() {
; CHECK-LABEL: define i32 @main() {
-; CHECK-NEXT: [[ENTRY:.*:]]
-; CHECK-NEXT: br i1 false, label %[[ENTRY_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE:.*]], label %[[LAND_RHS_I_I:.*]]
-; CHECK: [[ENTRY_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE]]:
-; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT_THREAD:.*]]
-; CHECK: [[LAND_RHS_I_I]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I_I_WHILE_BODY_I_CRIT_EDGE:.*]], label %[[LAND_RHS_I84_I:.*]]
-; CHECK: [[LAND_RHS_I_I_WHILE_BODY_I_CRIT_EDGE]]:
-; CHECK-NEXT: br label %[[WHILE_BODY_I:.*]]
-; CHECK: [[LAND_RHS_I74_I:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I]], label %[[LAND_RHS_I74_I_MPATH_PARENT_EXIT_CRIT_EDGE:.*]]
-; CHECK: [[LAND_RHS_I74_I_MPATH_PARENT_EXIT_CRIT_EDGE]]:
-; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT:.*]]
-; CHECK: [[WHILE_BODY_I]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE:.*]], label %[[LAND_RHS_I74_I]]
-; CHECK: [[WHILE_BODY_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE]]:
-; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT_THREAD]]
-; CHECK: [[LAND_RHS_I84_I]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I:.*]], label %[[WHILE_BODY4_I:.*]]
-; CHECK: [[WHILE_BODY4_I]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY4_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE:.*]], label %[[LAND_RHS_I84_I]]
-; CHECK: [[WHILE_BODY4_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE]]:
-; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT_THREAD]]
-; CHECK: [[WHILE_END6_I]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I:.*]], label %[[WHILE_END6_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE:.*]]
-; CHECK: [[WHILE_END6_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE]]:
-; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT_THREAD]]
-; CHECK: [[LAND_RHS_I99_I]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I:.*]], label %[[MPATH_PARENT_EXIT]]
-; CHECK: [[WHILE_BODY13_I]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I]], label %[[WHILE_BODY13_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE:.*]]
-; CHECK: [[WHILE_BODY13_I_MPATH_PARENT_EXIT_THREAD_CRIT_EDGE]]:
-; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT_THREAD]]
-; CHECK: [[MPATH_PARENT_EXIT_THREAD]]:
-; CHECK-NEXT: br label %[[IF_THEN_I:.*]]
-; CHECK: [[MPATH_PARENT_EXIT]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I:.*]], label %[[MPATH_PARENT_EXIT_IF_THEN_I_CRIT_EDGE:.*]]
-; CHECK: [[MPATH_PARENT_EXIT_IF_THEN_I_CRIT_EDGE]]:
-; CHECK-NEXT: br label %[[IF_THEN_I]]
-; CHECK: [[MSTR_EQ_EXIT_I]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT:.*]], label %[[MSTR_EQ_EXIT_I_IF_THEN_I_CRIT_EDGE:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I_IF_THEN_I_CRIT_EDGE]]:
-; CHECK-NEXT: br label %[[IF_THEN_I]]
-; CHECK: [[IF_THEN_I]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT767:.*]], label %[[LAND_RHS_I_I735:.*]]
-; CHECK: [[LAND_RHS_I_I735]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I758:.*]], label %[[LAND_RHS_I84_I738:.*]]
-; CHECK: [[LAND_RHS_I74_I764:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I758]], label %[[LAND_RHS_I_I769:.*]]
-; CHECK: [[WHILE_BODY_I758]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT767]], label %[[LAND_RHS_I74_I764]]
-; CHECK: [[LAND_RHS_I84_I738]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I748:.*]], label %[[WHILE_BODY4_I742:.*]]
-; CHECK: [[WHILE_BODY4_I742]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT767]], label %[[LAND_RHS_I84_I738]]
-; CHECK: [[WHILE_END6_I748]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I751:.*]], label %[[LAND_RHS_I_I769]]
-; CHECK: [[LAND_RHS_I99_I751]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I755:.*]], label %[[LAND_RHS_I_I769]]
-; CHECK: [[WHILE_BODY13_I755]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I751]], label %[[LAND_RHS_I_I769]]
-; CHECK: [[MPATH_PARENT_EXIT767]]:
-; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT801_THREAD:.*]]
-; CHECK: [[LAND_RHS_I_I769]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I792:.*]], label %[[LAND_RHS_I84_I772:.*]]
-; CHECK: [[LAND_RHS_I74_I798:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I792]], label %[[MPATH_PARENT_EXIT801:.*]]
-; CHECK: [[WHILE_BODY_I792]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT801_THREAD]], label %[[LAND_RHS_I74_I798]]
-; CHECK: [[LAND_RHS_I84_I772]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I782:.*]], label %[[WHILE_BODY4_I776:.*]]
-; CHECK: [[WHILE_BODY4_I776]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT801_THREAD]], label %[[LAND_RHS_I84_I772]]
-; CHECK: [[WHILE_END6_I782]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I785:.*]], label %[[MPATH_PARENT_EXIT801_THREAD]]
-; CHECK: [[LAND_RHS_I99_I785]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I789:.*]], label %[[MPATH_PARENT_EXIT801]]
-; CHECK: [[WHILE_BODY13_I789]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I785]], label %[[MPATH_PARENT_EXIT801_THREAD]]
-; CHECK: [[MPATH_PARENT_EXIT801_THREAD]]:
-; CHECK-NEXT: br label %[[IF_THEN_I804:.*]]
-; CHECK: [[MPATH_PARENT_EXIT801]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I806:.*]], label %[[IF_THEN_I804]]
-; CHECK: [[MSTR_EQ_EXIT_I806]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I_I812:.*]], label %[[IF_THEN_I804]]
-; CHECK: [[IF_THEN_I804]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[LAND_RHS_I84_US_I:.*]]:
-; CHECK-NEXT: br label %[[WHILE_BODY4_US_I:.*]]
-; CHECK: [[WHILE_BODY4_US_I]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT820:.*]], label %[[LAND_RHS_I84_US_I]]
-; CHECK: [[LAND_RHS_I_I812]]:
-; CHECK-NEXT: br label %[[LAND_RHS_I84_US_I]]
+; CHECK-NEXT: [[ENTRY:.*]]:
+; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT820:.*]]
; CHECK: [[LAND_RHS_I74_US_I:.*]]:
; CHECK-NEXT: [[TMP0:%.*]] = insertvalue [2 x i32] [[TMP0]], i32 0, 1
; CHECK-NEXT: [[PATH_COERCE_FCA_0_EXTRACT_I75_US_I:%.*]] = extractvalue [2 x i32] [[TMP0]], 0
@@ -106,632 +14,12 @@ define i32 @main() {
; CHECK-NEXT: ]
; CHECK: [[WHILE_BODY_US_I]]:
; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT820]], label %[[LAND_RHS_I74_US_I]]
-; CHECK: [[WHILE_END6_I817:.*]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_US_I:.*]], label %[[MPATH_PARENT_EXIT820]]
-; CHECK: [[LAND_RHS_I99_US_I]]:
-; CHECK-NEXT: switch i8 0, label %[[MPATH_PARENT_EXIT820]] [
-; CHECK-NEXT: i8 92, label %[[WHILE_BODY13_US_I:.*]]
-; CHECK-NEXT: i8 47, label %[[WHILE_BODY13_US_I]]
-; CHECK-NEXT: ]
-; CHECK: [[WHILE_BODY13_US_I]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_US_I]], label %[[MPATH_PARENT_EXIT820]]
; CHECK: [[MPATH_PARENT_EXIT820]]:
-; CHECK-NEXT: [[PATH_COERCE_FCA_0_EXTRACT_SINK_I814:%.*]] = phi i32 [ 0, %[[WHILE_END6_I817]] ], [ [[PATH_COERCE_FCA_0_EXTRACT_I75_US_I]], %[[LAND_RHS_I74_US_I]] ], [ 0, %[[WHILE_BODY_US_I]] ], [ 0, %[[WHILE_BODY13_US_I]] ], [ 0, %[[LAND_RHS_I99_US_I]] ], [ 0, %[[WHILE_BODY4_US_I]] ]
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I826:.*]], label %[[IF_THEN_I824:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I826]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I_I832:.*]], label %[[IF_THEN_I824]]
-; CHECK: [[IF_THEN_I824]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[LAND_RHS_I_I832]]:
-; CHECK-NEXT: br label %[[LAND_RHS_I84_I835:.*]]
-; CHECK: [[LAND_RHS_I84_I835]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I845:.*]], label %[[WHILE_BODY4_I839:.*]]
-; CHECK: [[WHILE_BODY4_I839]]:
-; CHECK-NEXT: br i1 false, label %[[IF_THEN_I871:.*]], label %[[LAND_RHS_I84_I835]]
-; CHECK: [[WHILE_END6_I845]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I848:.*]], label %[[LAND_RHS_I_I866:.*]]
-; CHECK: [[LAND_RHS_I99_I848]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I852:.*]], label %[[LAND_RHS_I_I866]]
-; CHECK: [[WHILE_BODY13_I852]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I848]], label %[[LAND_RHS_I_I866]]
-; CHECK: [[IF_THEN_I871]]:
-; CHECK-NEXT: br label %[[MPATH_JOIN_EXIT:.*]]
-; CHECK: [[LAND_RHS_I_I866]]:
-; CHECK-NEXT: br i1 false, label %[[IF_THEN6_I_I_I:.*]], label %[[IF_END9_I:.*]]
-; CHECK: [[IF_THEN6_I_I_I]]:
-; CHECK-NEXT: br label %[[MPATH_JOIN_EXIT]]
-; CHECK: [[IF_END9_I]]:
-; CHECK-NEXT: br label %[[MPATH_JOIN_EXIT]]
-; CHECK: [[MPATH_JOIN_EXIT]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I879:.*]], label %[[IF_THEN_I877:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I879]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT882:.*]], label %[[IF_THEN_I877]]
-; CHECK: [[IF_THEN_I877]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT882]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT917:.*]], label %[[LAND_RHS_I_I885:.*]]
-; CHECK: [[LAND_RHS_I_I885]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I908:.*]], label %[[LAND_RHS_I84_I888:.*]]
-; CHECK: [[LAND_RHS_I74_I914:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I908]], label %[[MPATH_PARENT_EXIT917]]
-; CHECK: [[WHILE_BODY_I908]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT917]], label %[[LAND_RHS_I74_I914]]
-; CHECK: [[LAND_RHS_I84_I888]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I898:.*]], label %[[WHILE_BODY4_I892:.*]]
-; CHECK: [[WHILE_BODY4_I892]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT917]], label %[[LAND_RHS_I84_I888]]
-; CHECK: [[WHILE_END6_I898]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I901:.*]], label %[[MPATH_PARENT_EXIT917]]
-; CHECK: [[LAND_RHS_I99_I901]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I905:.*]], label %[[MPATH_PARENT_EXIT917]]
-; CHECK: [[WHILE_BODY13_I905]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I901]], label %[[MPATH_PARENT_EXIT917]]
-; CHECK: [[MPATH_PARENT_EXIT917]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I923:.*]], label %[[IF_THEN_I921:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I923]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT926:.*]], label %[[IF_THEN_I921]]
-; CHECK: [[IF_THEN_I921]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT926]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT962:.*]], label %[[LAND_RHS_I_I930:.*]]
-; CHECK: [[LAND_RHS_I_I930]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I953:.*]], label %[[LAND_RHS_I84_I933:.*]]
-; CHECK: [[LAND_RHS_I74_I959:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I953]], label %[[MPATH_PARENT_EXIT962]]
-; CHECK: [[WHILE_BODY_I953]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT962]], label %[[LAND_RHS_I74_I959]]
-; CHECK: [[LAND_RHS_I84_I933]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I943:.*]], label %[[WHILE_BODY4_I937:.*]]
-; CHECK: [[WHILE_BODY4_I937]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT962]], label %[[LAND_RHS_I84_I933]]
-; CHECK: [[WHILE_END6_I943]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I946:.*]], label %[[MPATH_PARENT_EXIT962]]
-; CHECK: [[LAND_RHS_I99_I946]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I950:.*]], label %[[MPATH_PARENT_EXIT962]]
-; CHECK: [[WHILE_BODY13_I950]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I946]], label %[[MPATH_PARENT_EXIT962]]
-; CHECK: [[MPATH_PARENT_EXIT962]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I968:.*]], label %[[IF_THEN_I966:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I968]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT971:.*]], label %[[IF_THEN_I966]]
-; CHECK: [[IF_THEN_I966]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT971]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1007:.*]], label %[[LAND_RHS_I_I975:.*]]
-; CHECK: [[LAND_RHS_I_I975]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I998:.*]], label %[[LAND_RHS_I84_I978:.*]]
-; CHECK: [[LAND_RHS_I74_I1004:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I998]], label %[[MPATH_PARENT_EXIT1007]]
-; CHECK: [[WHILE_BODY_I998]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1007]], label %[[LAND_RHS_I74_I1004]]
-; CHECK: [[LAND_RHS_I84_I978]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I988:.*]], label %[[WHILE_BODY4_I982:.*]]
-; CHECK: [[WHILE_BODY4_I982]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1007]], label %[[LAND_RHS_I84_I978]]
-; CHECK: [[WHILE_END6_I988]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I991:.*]], label %[[MPATH_PARENT_EXIT1007]]
-; CHECK: [[LAND_RHS_I99_I991]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I995:.*]], label %[[MPATH_PARENT_EXIT1007]]
-; CHECK: [[WHILE_BODY13_I995]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I991]], label %[[MPATH_PARENT_EXIT1007]]
-; CHECK: [[MPATH_PARENT_EXIT1007]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1013:.*]], label %[[IF_THEN_I1011:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1013]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1016:.*]], label %[[IF_THEN_I1011]]
-; CHECK: [[IF_THEN_I1011]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1016]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1052:.*]], label %[[LAND_RHS_I_I1020:.*]]
-; CHECK: [[LAND_RHS_I_I1020]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1043:.*]], label %[[LAND_RHS_I84_I1023:.*]]
-; CHECK: [[LAND_RHS_I74_I1049:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1043]], label %[[MPATH_PARENT_EXIT1052]]
-; CHECK: [[WHILE_BODY_I1043]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1052]], label %[[LAND_RHS_I74_I1049]]
-; CHECK: [[LAND_RHS_I84_I1023]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1033:.*]], label %[[WHILE_BODY4_I1027:.*]]
-; CHECK: [[WHILE_BODY4_I1027]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1052]], label %[[LAND_RHS_I84_I1023]]
-; CHECK: [[WHILE_END6_I1033]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1036:.*]], label %[[MPATH_PARENT_EXIT1052]]
-; CHECK: [[LAND_RHS_I99_I1036]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1040:.*]], label %[[MPATH_PARENT_EXIT1052]]
-; CHECK: [[WHILE_BODY13_I1040]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1036]], label %[[MPATH_PARENT_EXIT1052]]
-; CHECK: [[MPATH_PARENT_EXIT1052]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1058:.*]], label %[[IF_THEN_I1056:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1058]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1061:.*]], label %[[IF_THEN_I1056]]
-; CHECK: [[IF_THEN_I1056]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1061]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1097:.*]], label %[[LAND_RHS_I_I1065:.*]]
-; CHECK: [[LAND_RHS_I_I1065]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1088:.*]], label %[[LAND_RHS_I84_I1068:.*]]
-; CHECK: [[LAND_RHS_I74_I1094:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1088]], label %[[MPATH_PARENT_EXIT1097]]
-; CHECK: [[WHILE_BODY_I1088]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1097]], label %[[LAND_RHS_I74_I1094]]
-; CHECK: [[LAND_RHS_I84_I1068]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1078:.*]], label %[[WHILE_BODY4_I1072:.*]]
-; CHECK: [[WHILE_BODY4_I1072]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1097]], label %[[LAND_RHS_I84_I1068]]
-; CHECK: [[WHILE_END6_I1078]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1081:.*]], label %[[MPATH_PARENT_EXIT1097]]
-; CHECK: [[LAND_RHS_I99_I1081]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1085:.*]], label %[[MPATH_PARENT_EXIT1097]]
-; CHECK: [[WHILE_BODY13_I1085]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1081]], label %[[MPATH_PARENT_EXIT1097]]
-; CHECK: [[MPATH_PARENT_EXIT1097]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1103:.*]], label %[[IF_THEN_I1101:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1103]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1106:.*]], label %[[IF_THEN_I1101]]
-; CHECK: [[IF_THEN_I1101]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1106]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1142:.*]], label %[[LAND_RHS_I_I1110:.*]]
-; CHECK: [[LAND_RHS_I_I1110]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1133:.*]], label %[[LAND_RHS_I84_I1113:.*]]
-; CHECK: [[LAND_RHS_I74_I1139:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1133]], label %[[MPATH_PARENT_EXIT1142]]
-; CHECK: [[WHILE_BODY_I1133]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1142]], label %[[LAND_RHS_I74_I1139]]
-; CHECK: [[LAND_RHS_I84_I1113]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1123:.*]], label %[[WHILE_BODY4_I1117:.*]]
-; CHECK: [[WHILE_BODY4_I1117]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1142]], label %[[LAND_RHS_I84_I1113]]
-; CHECK: [[WHILE_END6_I1123]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1126:.*]], label %[[MPATH_PARENT_EXIT1142]]
-; CHECK: [[LAND_RHS_I99_I1126]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1130:.*]], label %[[MPATH_PARENT_EXIT1142]]
-; CHECK: [[WHILE_BODY13_I1130]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1126]], label %[[MPATH_PARENT_EXIT1142]]
-; CHECK: [[MPATH_PARENT_EXIT1142]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1148:.*]], label %[[IF_THEN_I1146:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1148]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1151:.*]], label %[[IF_THEN_I1146]]
-; CHECK: [[IF_THEN_I1146]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1151]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1187:.*]], label %[[LAND_RHS_I_I1155:.*]]
-; CHECK: [[LAND_RHS_I_I1155]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1178:.*]], label %[[LAND_RHS_I84_I1158:.*]]
-; CHECK: [[LAND_RHS_I74_I1184:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1178]], label %[[MPATH_PARENT_EXIT1187]]
-; CHECK: [[WHILE_BODY_I1178]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1187]], label %[[LAND_RHS_I74_I1184]]
-; CHECK: [[LAND_RHS_I84_I1158]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1168:.*]], label %[[WHILE_BODY4_I1162:.*]]
-; CHECK: [[WHILE_BODY4_I1162]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1187]], label %[[LAND_RHS_I84_I1158]]
-; CHECK: [[WHILE_END6_I1168]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1171:.*]], label %[[MPATH_PARENT_EXIT1187]]
-; CHECK: [[LAND_RHS_I99_I1171]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1175:.*]], label %[[MPATH_PARENT_EXIT1187]]
-; CHECK: [[WHILE_BODY13_I1175]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1171]], label %[[MPATH_PARENT_EXIT1187]]
-; CHECK: [[MPATH_PARENT_EXIT1187]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1193:.*]], label %[[IF_THEN_I1191:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1193]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1196:.*]], label %[[IF_THEN_I1191]]
-; CHECK: [[IF_THEN_I1191]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1196]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1232:.*]], label %[[LAND_RHS_I_I1200:.*]]
-; CHECK: [[LAND_RHS_I_I1200]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1223:.*]], label %[[LAND_RHS_I84_I1203:.*]]
-; CHECK: [[LAND_RHS_I74_I1229:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1223]], label %[[MPATH_PARENT_EXIT1232]]
-; CHECK: [[WHILE_BODY_I1223]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1232]], label %[[LAND_RHS_I74_I1229]]
-; CHECK: [[LAND_RHS_I84_I1203]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1213:.*]], label %[[WHILE_BODY4_I1207:.*]]
-; CHECK: [[WHILE_BODY4_I1207]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1232]], label %[[LAND_RHS_I84_I1203]]
-; CHECK: [[WHILE_END6_I1213]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1216:.*]], label %[[MPATH_PARENT_EXIT1232]]
-; CHECK: [[LAND_RHS_I99_I1216]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1220:.*]], label %[[MPATH_PARENT_EXIT1232]]
-; CHECK: [[WHILE_BODY13_I1220]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1216]], label %[[MPATH_PARENT_EXIT1232]]
-; CHECK: [[MPATH_PARENT_EXIT1232]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1238:.*]], label %[[IF_THEN_I1236:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1238]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1241:.*]], label %[[IF_THEN_I1236]]
-; CHECK: [[IF_THEN_I1236]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1241]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1277:.*]], label %[[LAND_RHS_I_I1245:.*]]
-; CHECK: [[LAND_RHS_I_I1245]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1268:.*]], label %[[LAND_RHS_I84_I1248:.*]]
-; CHECK: [[LAND_RHS_I74_I1274:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1268]], label %[[MPATH_PARENT_EXIT1277]]
-; CHECK: [[WHILE_BODY_I1268]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1277]], label %[[LAND_RHS_I74_I1274]]
-; CHECK: [[LAND_RHS_I84_I1248]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1258:.*]], label %[[WHILE_BODY4_I1252:.*]]
-; CHECK: [[WHILE_BODY4_I1252]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1277]], label %[[LAND_RHS_I84_I1248]]
-; CHECK: [[WHILE_END6_I1258]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1261:.*]], label %[[MPATH_PARENT_EXIT1277]]
-; CHECK: [[LAND_RHS_I99_I1261]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1265:.*]], label %[[MPATH_PARENT_EXIT1277]]
-; CHECK: [[WHILE_BODY13_I1265]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1261]], label %[[MPATH_PARENT_EXIT1277]]
-; CHECK: [[MPATH_PARENT_EXIT1277]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1283:.*]], label %[[IF_THEN_I1281:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1283]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1286:.*]], label %[[IF_THEN_I1281]]
-; CHECK: [[IF_THEN_I1281]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1286]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1322:.*]], label %[[LAND_RHS_I_I1290:.*]]
-; CHECK: [[LAND_RHS_I_I1290]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1313:.*]], label %[[LAND_RHS_I84_I1293:.*]]
-; CHECK: [[LAND_RHS_I74_I1319:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1313]], label %[[MPATH_PARENT_EXIT1322]]
-; CHECK: [[WHILE_BODY_I1313]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1322]], label %[[LAND_RHS_I74_I1319]]
-; CHECK: [[LAND_RHS_I84_I1293]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1303:.*]], label %[[WHILE_BODY4_I1297:.*]]
-; CHECK: [[WHILE_BODY4_I1297]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1322]], label %[[LAND_RHS_I84_I1293]]
-; CHECK: [[WHILE_END6_I1303]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1306:.*]], label %[[MPATH_PARENT_EXIT1322]]
-; CHECK: [[LAND_RHS_I99_I1306]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1310:.*]], label %[[MPATH_PARENT_EXIT1322]]
-; CHECK: [[WHILE_BODY13_I1310]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1306]], label %[[MPATH_PARENT_EXIT1322]]
-; CHECK: [[MPATH_PARENT_EXIT1322]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1328:.*]], label %[[IF_THEN_I1326:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1328]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1331:.*]], label %[[IF_THEN_I1326]]
-; CHECK: [[IF_THEN_I1326]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1331]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1367:.*]], label %[[LAND_RHS_I_I1335:.*]]
-; CHECK: [[LAND_RHS_I_I1335]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1358:.*]], label %[[LAND_RHS_I84_I1338:.*]]
-; CHECK: [[LAND_RHS_I74_I1364:.*]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY_I1358]], label %[[MPATH_PARENT_EXIT1367]]
-; CHECK: [[WHILE_BODY_I1358]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1367]], label %[[LAND_RHS_I74_I1364]]
-; CHECK: [[LAND_RHS_I84_I1338]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END6_I1348:.*]], label %[[WHILE_BODY4_I1342:.*]]
-; CHECK: [[WHILE_BODY4_I1342]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT1367]], label %[[LAND_RHS_I84_I1338]]
-; CHECK: [[WHILE_END6_I1348]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1351:.*]], label %[[MPATH_PARENT_EXIT1367]]
-; CHECK: [[LAND_RHS_I99_I1351]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_BODY13_I1355:.*]], label %[[MPATH_PARENT_EXIT1367]]
-; CHECK: [[WHILE_BODY13_I1355]]:
-; CHECK-NEXT: br i1 false, label %[[LAND_RHS_I99_I1351]], label %[[MPATH_PARENT_EXIT1367]]
-; CHECK: [[MPATH_PARENT_EXIT1367]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1373:.*]], label %[[IF_THEN_I1371:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1373]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1376:.*]], label %[[IF_THEN_I1371]]
-; CHECK: [[IF_THEN_I1371]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1376]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT:.*]], label %[[IF_END_I:.*]]
-; CHECK: [[IF_END_I]]:
-; CHECK-NEXT: br label %[[WHILE_COND_I:.*]]
-; CHECK: [[WHILE_COND_I]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I:.*]], label %[[LAND_RHS_I:.*]]
-; CHECK: [[LAND_RHS_I]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I]], label %[[WHILE_COND_I]]
-; CHECK: [[WHILE_END_I]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT]], label %[[IF_END8_I:.*]]
-; CHECK: [[IF_END8_I]]:
-; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT]]
-; CHECK: [[MPATH_FILENAME_EXIT]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1391:.*]], label %[[IF_THEN_I1389:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1391]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1394:.*]], label %[[IF_THEN_I1389]]
-; CHECK: [[IF_THEN_I1389]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1394]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1419:.*]], label %[[IF_END_I1398:.*]]
-; CHECK: [[IF_END_I1398]]:
-; CHECK-NEXT: br label %[[WHILE_COND_I1400:.*]]
-; CHECK: [[WHILE_COND_I1400]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1406:.*]], label %[[LAND_RHS_I1403:.*]]
-; CHECK: [[LAND_RHS_I1403]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1406]], label %[[WHILE_COND_I1400]]
-; CHECK: [[WHILE_END_I1406]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1419]], label %[[IF_END8_I1411:.*]]
-; CHECK: [[IF_END8_I1411]]:
-; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1419]]
-; CHECK: [[MPATH_FILENAME_EXIT1419]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1425:.*]], label %[[IF_THEN_I1423:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1425]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1428:.*]], label %[[IF_THEN_I1423]]
-; CHECK: [[IF_THEN_I1423]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1428]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1453:.*]], label %[[IF_END_I1432:.*]]
-; CHECK: [[IF_END_I1432]]:
-; CHECK-NEXT: br label %[[WHILE_COND_I1434:.*]]
-; CHECK: [[WHILE_COND_I1434]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1440:.*]], label %[[LAND_RHS_I1437:.*]]
-; CHECK: [[LAND_RHS_I1437]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1440]], label %[[WHILE_COND_I1434]]
-; CHECK: [[WHILE_END_I1440]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1453]], label %[[IF_END8_I1445:.*]]
-; CHECK: [[IF_END8_I1445]]:
-; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1453]]
-; CHECK: [[MPATH_FILENAME_EXIT1453]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1459:.*]], label %[[IF_THEN_I1457:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1459]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1462:.*]], label %[[IF_THEN_I1457]]
-; CHECK: [[IF_THEN_I1457]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1462]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1487:.*]], label %[[IF_END_I1466:.*]]
-; CHECK: [[IF_END_I1466]]:
-; CHECK-NEXT: br label %[[WHILE_COND_I1468:.*]]
-; CHECK: [[WHILE_COND_I1468]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1474:.*]], label %[[LAND_RHS_I1471:.*]]
-; CHECK: [[LAND_RHS_I1471]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1474]], label %[[WHILE_COND_I1468]]
-; CHECK: [[WHILE_END_I1474]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1487]], label %[[IF_END8_I1479:.*]]
-; CHECK: [[IF_END8_I1479]]:
-; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1487]]
-; CHECK: [[MPATH_FILENAME_EXIT1487]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1493:.*]], label %[[IF_THEN_I1491:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1493]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1496:.*]], label %[[IF_THEN_I1491]]
-; CHECK: [[IF_THEN_I1491]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1496]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1521:.*]], label %[[IF_END_I1500:.*]]
-; CHECK: [[IF_END_I1500]]:
-; CHECK-NEXT: br label %[[WHILE_COND_I1502:.*]]
-; CHECK: [[WHILE_COND_I1502]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1508:.*]], label %[[LAND_RHS_I1505:.*]]
-; CHECK: [[LAND_RHS_I1505]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1508]], label %[[WHILE_COND_I1502]]
-; CHECK: [[WHILE_END_I1508]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1521]], label %[[IF_END8_I1513:.*]]
-; CHECK: [[IF_END8_I1513]]:
-; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1521]]
-; CHECK: [[MPATH_FILENAME_EXIT1521]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1527:.*]], label %[[IF_THEN_I1525:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1527]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1530:.*]], label %[[IF_THEN_I1525]]
-; CHECK: [[IF_THEN_I1525]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1530]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1555:.*]], label %[[IF_END_I1534:.*]]
-; CHECK: [[IF_END_I1534]]:
-; CHECK-NEXT: br label %[[WHILE_COND_I1536:.*]]
-; CHECK: [[WHILE_COND_I1536]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1542:.*]], label %[[LAND_RHS_I1539:.*]]
-; CHECK: [[LAND_RHS_I1539]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1542]], label %[[WHILE_COND_I1536]]
-; CHECK: [[WHILE_END_I1542]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1555]], label %[[IF_END8_I1547:.*]]
-; CHECK: [[IF_END8_I1547]]:
-; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1555]]
-; CHECK: [[MPATH_FILENAME_EXIT1555]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1561:.*]], label %[[IF_THEN_I1559:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1561]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1564:.*]], label %[[IF_THEN_I1559]]
-; CHECK: [[IF_THEN_I1559]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1564]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1589:.*]], label %[[IF_END_I1568:.*]]
-; CHECK: [[IF_END_I1568]]:
-; CHECK-NEXT: br label %[[WHILE_COND_I1570:.*]]
-; CHECK: [[WHILE_COND_I1570]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1576:.*]], label %[[LAND_RHS_I1573:.*]]
-; CHECK: [[LAND_RHS_I1573]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1576]], label %[[WHILE_COND_I1570]]
-; CHECK: [[WHILE_END_I1576]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1589]], label %[[IF_END8_I1581:.*]]
-; CHECK: [[IF_END8_I1581]]:
-; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1589]]
-; CHECK: [[MPATH_FILENAME_EXIT1589]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1595:.*]], label %[[IF_THEN_I1593:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1595]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1598:.*]], label %[[IF_THEN_I1593]]
-; CHECK: [[IF_THEN_I1593]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1598]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1623:.*]], label %[[IF_END_I1602:.*]]
-; CHECK: [[IF_END_I1602]]:
-; CHECK-NEXT: br label %[[WHILE_COND_I1604:.*]]
-; CHECK: [[WHILE_COND_I1604]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1610:.*]], label %[[LAND_RHS_I1607:.*]]
-; CHECK: [[LAND_RHS_I1607]]:
-; CHECK-NEXT: br i1 false, label %[[WHILE_END_I1610]], label %[[WHILE_COND_I1604]]
-; CHECK: [[WHILE_END_I1610]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_FILENAME_EXIT1623]], label %[[IF_END8_I1615:.*]]
-; CHECK: [[IF_END8_I1615]]:
-; CHECK-NEXT: br label %[[MPATH_FILENAME_EXIT1623]]
-; CHECK: [[MPATH_FILENAME_EXIT1623]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1629:.*]], label %[[IF_THEN_I1627:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1629]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1632:.*]], label %[[IF_THEN_I1627]]
-; CHECK: [[IF_THEN_I1627]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1632]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1645:.*]], label %[[IF_THEN_I1643:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1645]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1648:.*]], label %[[IF_THEN_I1643]]
-; CHECK: [[IF_THEN_I1643]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1648]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1672:.*]], label %[[IF_THEN_I1670:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1672]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1675:.*]], label %[[IF_THEN_I1670]]
-; CHECK: [[IF_THEN_I1670]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1675]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1699:.*]], label %[[IF_THEN_I1697:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1699]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1702:.*]], label %[[IF_THEN_I1697]]
-; CHECK: [[IF_THEN_I1697]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1702]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1726:.*]], label %[[IF_THEN_I1724:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1726]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1729:.*]], label %[[IF_THEN_I1724]]
-; CHECK: [[IF_THEN_I1724]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1729]]:
-; CHECK-NEXT: br i1 false, label %[[MSTR_EQ_EXIT_I1753:.*]], label %[[IF_THEN_I1751:.*]]
-; CHECK: [[MSTR_EQ_EXIT_I1753]]:
-; CHECK-NEXT: br i1 false, label %[[_MSTR_ASSERT__EXIT1756:.*]], label %[[IF_THEN_I1751]]
-; CHECK: [[IF_THEN_I1751]]:
-; CHECK-NEXT: unreachable
-; CHECK: [[_MSTR_ASSERT__EXIT1756]]:
+; CHECK-NEXT: [[PATH_COERCE_FCA_0_EXTRACT_SINK_I814:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[PATH_COERCE_FCA_0_EXTRACT_I75_US_I]], %[[LAND_RHS_I74_US_I]] ], [ 0, %[[WHILE_BODY_US_I]] ]
; CHECK-NEXT: ret i32 0
;
entry:
- br i1 false, label %entry.mpath_parent.exit.thread_crit_edge, label %land.rhs.i.i
-
-entry.mpath_parent.exit.thread_crit_edge: ; preds = %entry
- br label %mpath_parent.exit.thread
-
-land.rhs.i.i: ; preds = %entry
- br i1 false, label %land.rhs.i.i.while.body.i_crit_edge, label %land.rhs.i84.i
-
-land.rhs.i.i.while.body.i_crit_edge: ; preds = %land.rhs.i.i
- br label %while.body.i
-
-land.rhs.i74.i: ; preds = %while.body.i
- br i1 false, label %while.body.i, label %land.rhs.i74.i.mpath_parent.exit_crit_edge
-
-land.rhs.i74.i.mpath_parent.exit_crit_edge: ; preds = %land.rhs.i74.i
- br label %mpath_parent.exit
-
-while.body.i: ; preds = %land.rhs.i74.i, %land.rhs.i.i.while.body.i_crit_edge
- br i1 false, label %while.body.i.mpath_parent.exit.thread_crit_edge, label %land.rhs.i74.i
-
-while.body.i.mpath_parent.exit.thread_crit_edge: ; preds = %while.body.i
- br label %mpath_parent.exit.thread
-
-land.rhs.i84.i: ; preds = %while.body4.i, %land.rhs.i.i
- br i1 false, label %while.end6.i, label %while.body4.i
-
-while.body4.i: ; preds = %land.rhs.i84.i
- br i1 false, label %while.body4.i.mpath_parent.exit.thread_crit_edge, label %land.rhs.i84.i
-
-while.body4.i.mpath_parent.exit.thread_crit_edge: ; preds = %while.body4.i
- br label %mpath_parent.exit.thread
-
-while.end6.i: ; preds = %land.rhs.i84.i
- br i1 false, label %land.rhs.i99.i, label %while.end6.i.mpath_parent.exit.thread_crit_edge
-
-while.end6.i.mpath_parent.exit.thread_crit_edge: ; preds = %while.end6.i
- br label %mpath_parent.exit.thread
-
-land.rhs.i99.i: ; preds = %while.body13.i, %while.end6.i
- br i1 false, label %while.body13.i, label %mpath_parent.exit
-
-while.body13.i: ; preds = %land.rhs.i99.i
- br i1 false, label %land.rhs.i99.i, label %while.body13.i.mpath_parent.exit.thread_crit_edge
-
-while.body13.i.mpath_parent.exit.thread_crit_edge: ; preds = %while.body13.i
- br label %mpath_parent.exit.thread
-
-mpath_parent.exit.thread: ; preds = %while.body13.i.mpath_parent.exit.thread_crit_edge, %while.end6.i.mpath_parent.exit.thread_crit_edge, %while.body4.i.mpath_parent.exit.thread_crit_edge, %while.body.i.mpath_parent.exit.thread_crit_edge, %entry.mpath_parent.exit.thread_crit_edge
- br label %if.then.i
-
-mpath_parent.exit: ; preds = %land.rhs.i99.i, %land.rhs.i74.i.mpath_parent.exit_crit_edge
- br i1 false, label %mstr_eq.exit.i, label %mpath_parent.exit.if.then.i_crit_edge
-
-mpath_parent.exit.if.then.i_crit_edge: ; preds = %mpath_parent.exit
- br label %if.then.i
-
-mstr_eq.exit.i: ; preds = %mpath_parent.exit
- br i1 false, label %_mstr_assert_.exit, label %mstr_eq.exit.i.if.then.i_crit_edge
-
-mstr_eq.exit.i.if.then.i_crit_edge: ; preds = %mstr_eq.exit.i
- br label %if.then.i
-
-if.then.i: ; preds = %mstr_eq.exit.i.if.then.i_crit_edge, %mpath_parent.exit.if.then.i_crit_edge, %mpath_parent.exit.thread
- unreachable
-
-_mstr_assert_.exit: ; preds = %mstr_eq.exit.i
- br i1 false, label %mpath_parent.exit767, label %land.rhs.i.i735
-
-land.rhs.i.i735: ; preds = %_mstr_assert_.exit
- br i1 false, label %while.body.i758, label %land.rhs.i84.i738
-
-land.rhs.i74.i764: ; preds = %while.body.i758
- br i1 false, label %while.body.i758, label %land.rhs.i.i769
-
-while.body.i758: ; preds = %land.rhs.i74.i764, %land.rhs.i.i735
- br i1 false, label %mpath_parent.exit767, label %land.rhs.i74.i764
-
-land.rhs.i84.i738: ; preds = %while.body4.i742, %land.rhs.i.i735
- br i1 false, label %while.end6.i748, label %while.body4.i742
-
-while.body4.i742: ; preds = %land.rhs.i84.i738
- br i1 false, label %mpath_parent.exit767, label %land.rhs.i84.i738
-
-while.end6.i748: ; preds = %land.rhs.i84.i738
- br i1 false, label %land.rhs.i99.i751, label %land.rhs.i.i769
-
-land.rhs.i99.i751: ; preds = %while.body13.i755, %while.end6.i748
- br i1 false, label %while.body13.i755, label %land.rhs.i.i769
-
-while.body13.i755: ; preds = %land.rhs.i99.i751
- br i1 false, label %land.rhs.i99.i751, label %land.rhs.i.i769
-
-mpath_parent.exit767: ; preds = %while.body4.i742, %while.body.i758, %_mstr_assert_.exit
- br label %mpath_parent.exit801.thread
-
-land.rhs.i.i769: ; preds = %while.body13.i755, %land.rhs.i99.i751, %while.end6.i748, %land.rhs.i74.i764
- br i1 false, label %while.body.i792, label %land.rhs.i84.i772
-
-land.rhs.i74.i798: ; preds = %while.body.i792
- br i1 false, label %while.body.i792, label %mpath_parent.exit801
-
-while.body.i792: ; preds = %land.rhs.i74.i798, %land.rhs.i.i769
- br i1 false, label %mpath_parent.exit801.thread, label %land.rhs.i74.i798
-
-land.rhs.i84.i772: ; preds = %while.body4.i776, %land.rhs.i.i769
- br i1 false, label %while.end6.i782, label %while.body4.i776
-
-while.body4.i776: ; preds = %land.rhs.i84.i772
- br i1 false, label %mpath_parent.exit801.thread, label %land.rhs.i84.i772
-
-while.end6.i782: ; preds = %land.rhs.i84.i772
- br i1 false, label %land.rhs.i99.i785, label %mpath_parent.exit801.thread
-
-land.rhs.i99.i785: ; preds = %while.body13.i789, %while.end6.i782
- br i1 false, label %while.body13.i789, label %mpath_parent.exit801
-
-while.body13.i789: ; preds = %land.rhs.i99.i785
- br i1 false, label %land.rhs.i99.i785, label %mpath_parent.exit801.thread
-
-mpath_parent.exit801.thread: ; preds = %while.body13.i789, %while.end6.i782, %while.body4.i776, %while.body.i792, %mpath_parent.exit767
- br label %if.then.i804
-
-mpath_parent.exit801: ; preds = %land.rhs.i99.i785, %land.rhs.i74.i798
- br i1 false, label %mstr_eq.exit.i806, label %if.then.i804
-
-mstr_eq.exit.i806: ; preds = %mpath_parent.exit801
- br i1 false, label %land.rhs.i.i812, label %if.then.i804
-
-if.then.i804: ; preds = %mstr_eq.exit.i806, %mpath_parent.exit801, %mpath_parent.exit801.thread
- unreachable
-
-land.rhs.i84.us.i: ; preds = %land.rhs.i.i812, %while.body4.us.i
- switch i8 0, label %while.body4.us.i [
- i8 92, label %while.end6.i817
- i8 47, label %while.end6.i817
- ]
-
-while.body4.us.i: ; preds = %land.rhs.i84.us.i
- br i1 false, label %mpath_parent.exit820, label %land.rhs.i84.us.i
-
-land.rhs.i.i812: ; preds = %mstr_eq.exit.i806
- br label %land.rhs.i84.us.i
+ br label %mpath_parent.exit820
land.rhs.i74.us.i: ; preds = %while.body.us.i
%0 = insertvalue [2 x i32] %0, i32 0, 1
@@ -744,747 +32,10 @@ land.rhs.i74.us.i: ; preds = %while.body.us.i
while.body.us.i: ; preds = %land.rhs.i74.us.i, %land.rhs.i74.us.i
br i1 false, label %mpath_parent.exit820, label %land.rhs.i74.us.i
-while.end6.i817: ; preds = %land.rhs.i84.us.i, %land.rhs.i84.us.i
- br i1 false, label %land.rhs.i99.us.i, label %mpath_parent.exit820
-
-land.rhs.i99.us.i: ; preds = %while.body13.us.i, %while.end6.i817
- switch i8 0, label %mpath_parent.exit820 [
- i8 92, label %while.body13.us.i
- i8 47, label %while.body13.us.i
- ]
-
-while.body13.us.i: ; preds = %land.rhs.i99.us.i, %land.rhs.i99.us.i
- br i1 false, label %land.rhs.i99.us.i, label %mpath_parent.exit820
-
-mpath_parent.exit820: ; preds = %while.body13.us.i, %land.rhs.i99.us.i, %while.end6.i817, %while.body.us.i, %land.rhs.i74.us.i, %while.body4.us.i
- %path.coerce.fca.0.extract.sink.i814 = phi i32 [ 0, %while.end6.i817 ], [ %path.coerce.fca.0.extract.i75.us.i, %land.rhs.i74.us.i ], [ 0, %while.body.us.i ], [ 0, %while.body13.us.i ], [ 0, %land.rhs.i99.us.i ], [ 0, %while.body4.us.i ]
- br i1 false, label %mstr_eq.exit.i826, label %if.then.i824
-
-mstr_eq.exit.i826: ; preds = %mpath_parent.exit820
- br i1 false, label %land.rhs.i.i832, label %if.then.i824
-
-if.then.i824: ; preds = %mstr_eq.exit.i826, %mpath_parent.exit820
- unreachable
-
-land.rhs.i.i832: ; preds = %mstr_eq.exit.i826
- br label %land.rhs.i84.i835
-
-land.rhs.i84.i835: ; preds = %while.body4.i839, %land.rhs.i.i832
- br i1 false, label %while.end6.i845, label %while.body4.i839
-
-while.body4.i839: ; preds = %land.rhs.i84.i835
- br i1 false, label %if.then.i871, label %land.rhs.i84.i835
-
-while.end6.i845: ; preds = %land.rhs.i84.i835
- br i1 false, label %land.rhs.i99.i848, label %land.rhs.i.i866
-
-land.rhs.i99.i848: ; preds = %while.body13.i852, %while.end6.i845
- br i1 false, label %while.body13.i852, label %land.rhs.i.i866
-
-while.body13.i852: ; preds = %land.rhs.i99.i848
- br i1 false, label %land.rhs.i99.i848, label %land.rhs.i.i866
-
-if.then.i871: ; preds = %while.body4.i839
- br label %mpath_join.exit
-
-land.rhs.i.i866: ; preds = %while.body13.i852, %land.rhs.i99.i848, %while.end6.i845
- br i1 false, label %if.then6.i.i.i, label %if.end9.i
-
-if.then6.i.i.i: ; preds = %land.rhs.i.i866
- br label %mpath_join.exit
-
-if.end9.i: ; preds = %land.rhs.i.i866
- br label %mpath_join.exit
-
-mpath_join.exit: ; preds = %if.end9.i, %if.then6.i.i.i, %if.then.i871
- br i1 false, label %mstr_eq.exit.i879, label %if.then.i877
-
-mstr_eq.exit.i879: ; preds = %mpath_join.exit
- br i1 false, label %_mstr_assert_.exit882, label %if.then.i877
-
-if.then.i877: ; preds = %mstr_eq.exit.i879, %mpath_join.exit
- unreachable
-
-_mstr_assert_.exit882: ; preds = %mstr_eq.exit.i879
- br i1 false, label %mpath_parent.exit917, label %land.rhs.i.i885
-
-land.rhs.i.i885: ; preds = %_mstr_assert_.exit882
- br i1 false, label %while.body.i908, label %land.rhs.i84.i888
-
-land.rhs.i74.i914: ; preds = %while.body.i908
- br i1 false, label %while.body.i908, label %mpath_parent.exit917
-
-while.body.i908: ; preds = %land.rhs.i74.i914, %land.rhs.i.i885
- br i1 false, label %mpath_parent.exit917, label %land.rhs.i74.i914
-
-land.rhs.i84.i888: ; preds = %while.body4.i892, %land.rhs.i.i885
- br i1 false, label %while.end6.i898, label %while.body4.i892
-
-while.body4.i892: ; preds = %land.rhs.i84.i888
- br i1 false, label %mpath_parent.exit917, label %land.rhs.i84.i888
-
-while.end6.i898: ; preds = %land.rhs.i84.i888
- br i1 false, label %land.rhs.i99.i901, label %mpath_parent.exit917
-
-land.rhs.i99.i901: ; preds = %while.body13.i905, %while.end6.i898
- br i1 false, label %while.body13.i905, label %mpath_parent.exit917
-
-while.body13.i905: ; preds = %land.rhs.i99.i901
- br i1 false, label %land.rhs.i99.i901, label %mpath_parent.exit917
-
-mpath_parent.exit917: ; preds = %while.body13.i905, %land.rhs.i99.i901, %while.end6.i898, %while.body4.i892, %while.body.i908, %land.rhs.i74.i914, %_mstr_assert_.exit882
- br i1 false, label %mstr_eq.exit.i923, label %if.then.i921
-
-mstr_eq.exit.i923: ; preds = %mpath_parent.exit917
- br i1 false, label %_mstr_assert_.exit926, label %if.then.i921
-
-if.then.i921: ; preds = %mstr_eq.exit.i923, %mpath_parent.exit917
- unreachable
-
-_mstr_assert_.exit926: ; preds = %mstr_eq.exit.i923
- br i1 false, label %mpath_parent.exit962, label %land.rhs.i.i930
-
-land.rhs.i.i930: ; preds = %_mstr_assert_.exit926
- br i1 false, label %while.body.i953, label %land.rhs.i84.i933
-
-land.rhs.i74.i959: ; preds = %while.body.i953
- br i1 false, label %while.body.i953, label %mpath_parent.exit962
-
-while.body.i953: ; preds = %land.rhs.i74.i959, %land.rhs.i.i930
- br i1 false, label %mpath_parent.exit962, label %land.rhs.i74.i959
-
-land.rhs.i84.i933: ; preds = %while.body4.i937, %land.rhs.i.i930
- br i1 false, label %while.end6.i943, label %while.body4.i937
-
-while.body4.i937: ; preds = %land.rhs.i84.i933
- br i1 false, label %mpath_parent.exit962, label %land.rhs.i84.i933
-
-while.end6.i943: ; preds = %land.rhs.i84.i933
- br i1 false, label %land.rhs.i99.i946, label %mpath_parent.exit962
-
-land.rhs.i99.i946: ; preds = %while.body13.i950, %while.end6.i943
- br i1 false, label %while.body13.i950, label %mpath_parent.exit962
-
-while.body13.i950: ; preds = %land.rhs.i99.i946
- br i1 false, label %land.rhs.i99.i946, label %mpath_parent.exit962
-
-mpath_parent.exit962: ; preds = %while.body13.i950, %land.rhs.i99.i946, %while.end6.i943, %while.body4.i937, %while.body.i953, %land.rhs.i74.i959, %_mstr_assert_.exit926
- br i1 false, label %mstr_eq.exit.i968, label %if.then.i966
-
-mstr_eq.exit.i968: ; preds = %mpath_parent.exit962
- br i1 false, label %_mstr_assert_.exit971, label %if.then.i966
-
-if.then.i966: ; preds = %mstr_eq.exit.i968, %mpath_parent.exit962
- unreachable
-
-_mstr_assert_.exit971: ; preds = %mstr_eq.exit.i968
- br i1 false, label %mpath_parent.exit1007, label %land.rhs.i.i975
-
-land.rhs.i.i975: ; preds = %_mstr_assert_.exit971
- br i1 false, label %while.body.i998, label %land.rhs.i84.i978
-
-land.rhs.i74.i1004: ; preds = %while.body.i998
- br i1 false, label %while.body.i998, label %mpath_parent.exit1007
-
-while.body.i998: ; preds = %land.rhs.i74.i1004, %land.rhs.i.i975
- br i1 false, label %mpath_parent.exit1007, label %land.rhs.i74.i1004
-
-land.rhs.i84.i978: ; preds = %while.body4.i982, %land.rhs.i.i975
- br i1 false, label %while.end6.i988, label %while.body4.i982
-
-while.body4.i982: ; preds = %land.rhs.i84.i978
- br i1 false, label %mpath_parent.exit1007, label %land.rhs.i84.i978
-
-while.end6.i988: ; preds = %land.rhs.i84.i978
- br i1 false, label %land.rhs.i99.i991, label %mpath_parent.exit1007
-
-land.rhs.i99.i991: ; preds = %while.body13.i995, %while.end6.i988
- br i1 false, label %while.body13.i995, label %mpath_parent.exit1007
-
-while.body13.i995: ; preds = %land.rhs.i99.i991
- br i1 false, label %land.rhs.i99.i991, label %mpath_parent.exit1007
-
-mpath_parent.exit1007: ; preds = %while.body13.i995, %land.rhs.i99.i991, %while.end6.i988, %while.body4.i982, %while.body.i998, %land.rhs.i74.i1004, %_mstr_assert_.exit971
- br i1 false, label %mstr_eq.exit.i1013, label %if.then.i1011
-
-mstr_eq.exit.i1013: ; preds = %mpath_parent.exit1007
- br i1 false, label %_mstr_assert_.exit1016, label %if.then.i1011
-
-if.then.i1011: ; preds = %mstr_eq.exit.i1013, %mpath_parent.exit1007
- unreachable
-
-_mstr_assert_.exit1016: ; preds = %mstr_eq.exit.i1013
- br i1 false, label %mpath_parent.exit1052, label %land.rhs.i.i1020
-
-land.rhs.i.i1020: ; preds = %_mstr_assert_.exit1016
- br i1 false, label %while.body.i1043, label %land.rhs.i84.i1023
-
-land.rhs.i74.i1049: ; preds = %while.body.i1043
- br i1 false, label %while.body.i1043, label %mpath_parent.exit1052
-
-while.body.i1043: ; preds = %land.rhs.i74.i1049, %land.rhs.i.i1020
- br i1 false, label %mpath_parent.exit1052, label %land.rhs.i74.i1049
-
-land.rhs.i84.i1023: ; preds = %while.body4.i1027, %land.rhs.i.i1020
- br i1 false, label %while.end6.i1033, label %while.body4.i1027
-
-while.body4.i1027: ; preds = %land.rhs.i84.i1023
- br i1 false, label %mpath_parent.exit1052, label %land.rhs.i84.i1023
-
-while.end6.i1033: ; preds = %land.rhs.i84.i1023
- br i1 false, label %land.rhs.i99.i1036, label %mpath_parent.exit1052
-
-land.rhs.i99.i1036: ; preds = %while.body13.i1040, %while.end6.i1033
- br i1 false, label %while.body13.i1040, label %mpath_parent.exit1052
-
-while.body13.i1040: ; preds = %land.rhs.i99.i1036
- br i1 false, label %land.rhs.i99.i1036, label %mpath_parent.exit1052
-
-mpath_parent.exit1052: ; preds = %while.body13.i1040, %land.rhs.i99.i1036, %while.end6.i1033, %while.body4.i1027, %while.body.i1043, %land.rhs.i74.i1049, %_mstr_assert_.exit1016
- br i1 false, label %mstr_eq.exit.i1058, label %if.then.i1056
-
-mstr_eq.exit.i1058: ; preds = %mpath_parent.exit1052
- br i1 false, label %_mstr_assert_.exit1061, label %if.then.i1056
-
-if.then.i1056: ; preds = %mstr_eq.exit.i1058, %mpath_parent.exit1052
- unreachable
-
-_mstr_assert_.exit1061: ; preds = %mstr_eq.exit.i1058
- br i1 false, label %mpath_parent.exit1097, label %land.rhs.i.i1065
-
-land.rhs.i.i1065: ; preds = %_mstr_assert_.exit1061
- br i1 false, label %while.body.i1088, label %land.rhs.i84.i1068
-
-land.rhs.i74.i1094: ; preds = %while.body.i1088
- br i1 false, label %while.body.i1088, label %mpath_parent.exit1097
-
-while.body.i1088: ; preds = %land.rhs.i74.i1094, %land.rhs.i.i1065
- br i1 false, label %mpath_parent.exit1097, label %land.rhs.i74.i1094
-
-land.rhs.i84.i1068: ; preds = %while.body4.i1072, %land.rhs.i.i1065
- br i1 false, label %while.end6.i1078, label %while.body4.i1072
-
-while.body4.i1072: ; preds = %land.rhs.i84.i1068
- br i1 false, label %mpath_parent.exit1097, label %land.rhs.i84.i1068
-
-while.end6.i1078: ; preds = %land.rhs.i84.i1068
- br i1 false, label %land.rhs.i99.i1081, label %mpath_parent.exit1097
-
-land.rhs.i99.i1081: ; preds = %while.body13.i1085, %while.end6.i1078
- br i1 false, label %while.body13.i1085, label %mpath_parent.exit1097
-
-while.body13.i1085: ; preds = %land.rhs.i99.i1081
- br i1 false, label %land.rhs.i99.i1081, label %mpath_parent.exit1097
-
-mpath_parent.exit1097: ; preds = %while.body13.i1085, %land.rhs.i99.i1081, %while.end6.i1078, %while.body4.i1072, %while.body.i1088, %land.rhs.i74.i1094, %_mstr_assert_.exit1061
- br i1 false, label %mstr_eq.exit.i1103, label %if.then.i1101
-
-mstr_eq.exit.i1103: ; preds = %mpath_parent.exit1097
- br i1 false, label %_mstr_assert_.exit1106, label %if.then.i1101
-
-if.then.i1101: ; preds = %mstr_eq.exit.i1103, %mpath_parent.exit1097
- unreachable
-
-_mstr_assert_.exit1106: ; preds = %mstr_eq.exit.i1103
- br i1 false, label %mpath_parent.exit1142, label %land.rhs.i.i1110
-
-land.rhs.i.i1110: ; preds = %_mstr_assert_.exit1106
- br i1 false, label %while.body.i1133, label %land.rhs.i84.i1113
-
-land.rhs.i74.i1139: ; preds = %while.body.i1133
- br i1 false, label %while.body.i1133, label %mpath_parent.exit1142
-
-while.body.i1133: ; preds = %land.rhs.i74.i1139, %land.rhs.i.i1110
- br i1 false, label %mpath_parent.exit1142, label %land.rhs.i74.i1139
-
-land.rhs.i84.i1113: ; preds = %while.body4.i1117, %land.rhs.i.i1110
- br i1 false, label %while.end6.i1123, label %while.body4.i1117
-
-while.body4.i1117: ; preds = %land.rhs.i84.i1113
- br i1 false, label %mpath_parent.exit1142, label %land.rhs.i84.i1113
-
-while.end6.i1123: ; preds = %land.rhs.i84.i1113
- br i1 false, label %land.rhs.i99.i1126, label %mpath_parent.exit1142
-
-land.rhs.i99.i1126: ; preds = %while.body13.i1130, %while.end6.i1123
- br i1 false, label %while.body13.i1130, label %mpath_parent.exit1142
-
-while.body13.i1130: ; preds = %land.rhs.i99.i1126
- br i1 false, label %land.rhs.i99.i1126, label %mpath_parent.exit1142
-
-mpath_parent.exit1142: ; preds = %while.body13.i1130, %land.rhs.i99.i1126, %while.end6.i1123, %while.body4.i1117, %while.body.i1133, %land.rhs.i74.i1139, %_mstr_assert_.exit1106
- br i1 false, label %mstr_eq.exit.i1148, label %if.then.i1146
-
-mstr_eq.exit.i1148: ; preds = %mpath_parent.exit1142
- br i1 false, label %_mstr_assert_.exit1151, label %if.then.i1146
-
-if.then.i1146: ; preds = %mstr_eq.exit.i1148, %mpath_parent.exit1142
- unreachable
-
-_mstr_assert_.exit1151: ; preds = %mstr_eq.exit.i1148
- br i1 false, label %mpath_parent.exit1187, label %land.rhs.i.i1155
-
-land.rhs.i.i1155: ; preds = %_mstr_assert_.exit1151
- br i1 false, label %while.body.i1178, label %land.rhs.i84.i1158
-
-land.rhs.i74.i1184: ; preds = %while.body.i1178
- br i1 false, label %while.body.i1178, label %mpath_parent.exit1187
-
-while.body.i1178: ; preds = %land.rhs.i74.i1184, %land.rhs.i.i1155
- br i1 false, label %mpath_parent.exit1187, label %land.rhs.i74.i1184
-
-land.rhs.i84.i1158: ; preds = %while.body4.i1162, %land.rhs.i.i1155
- br i1 false, label %while.end6.i1168, label %while.body4.i1162
-
-while.body4.i1162: ; preds = %land.rhs.i84.i1158
- br i1 false, label %mpath_parent.exit1187, label %land.rhs.i84.i1158
-
-while.end6.i1168: ; preds = %land.rhs.i84.i1158
- br i1 false, label %land.rhs.i99.i1171, label %mpath_parent.exit1187
-
-land.rhs.i99.i1171: ; preds = %while.body13.i1175, %while.end6.i1168
- br i1 false, label %while.body13.i1175, label %mpath_parent.exit1187
-
-while.body13.i1175: ; preds = %land.rhs.i99.i1171
- br i1 false, label %land.rhs.i99.i1171, label %mpath_parent.exit1187
-
-mpath_parent.exit1187: ; preds = %while.body13.i1175, %land.rhs.i99.i1171, %while.end6.i1168, %while.body4.i1162, %while.body.i1178, %land.rhs.i74.i1184, %_mstr_assert_.exit1151
- br i1 false, label %mstr_eq.exit.i1193, label %if.then.i1191
-
-mstr_eq.exit.i1193: ; preds = %mpath_parent.exit1187
- br i1 false, label %_mstr_assert_.exit1196, label %if.then.i1191
-
-if.then.i1191: ; preds = %mstr_eq.exit.i1193, %mpath_parent.exit1187
- unreachable
-
-_mstr_assert_.exit1196: ; preds = %mstr_eq.exit.i1193
- br i1 false, label %mpath_parent.exit1232, label %land.rhs.i.i1200
-
-land.rhs.i.i1200: ; preds = %_mstr_assert_.exit1196
- br i1 false, label %while.body.i1223, label %land.rhs.i84.i1203
-
-land.rhs.i74.i1229: ; preds = %while.body.i1223
- br i1 false, label %while.body.i1223, label %mpath_parent.exit1232
-
-while.body.i1223: ; preds = %land.rhs.i74.i1229, %land.rhs.i.i1200
- br i1 false, label %mpath_parent.exit1232, label %land.rhs.i74.i1229
-
-land.rhs.i84.i1203: ; preds = %while.body4.i1207, %land.rhs.i.i1200
- br i1 false, label %while.end6.i1213, label %while.body4.i1207
-
-while.body4.i1207: ; preds = %land.rhs.i84.i1203
- br i1 false, label %mpath_parent.exit1232, label %land.rhs.i84.i1203
-
-while.end6.i1213: ; preds = %land.rhs.i84.i1203
- br i1 false, label %land.rhs.i99.i1216, label %mpath_parent.exit1232
-
-land.rhs.i99.i1216: ; preds = %while.body13.i1220, %while.end6.i1213
- br i1 false, label %while.body13.i1220, label %mpath_parent.exit1232
-
-while.body13.i1220: ; preds = %land.rhs.i99.i1216
- br i1 false, label %land.rhs.i99.i1216, label %mpath_parent.exit1232
-
-mpath_parent.exit1232: ; preds = %while.body13.i1220, %land.rhs.i99.i1216, %while.end6.i1213, %while.body4.i1207, %while.body.i1223, %land.rhs.i74.i1229, %_mstr_assert_.exit1196
- br i1 false, label %mstr_eq.exit.i1238, label %if.then.i1236
-
-mstr_eq.exit.i1238: ; preds = %mpath_parent.exit1232
- br i1 false, label %_mstr_assert_.exit1241, label %if.then.i1236
-
-if.then.i1236: ; preds = %mstr_eq.exit.i1238, %mpath_parent.exit1232
- unreachable
-
-_mstr_assert_.exit1241: ; preds = %mstr_eq.exit.i1238
- br i1 false, label %mpath_parent.exit1277, label %land.rhs.i.i1245
-
-land.rhs.i.i1245: ; preds = %_mstr_assert_.exit1241
- br i1 false, label %while.body.i1268, label %land.rhs.i84.i1248
-
-land.rhs.i74.i1274: ; preds = %while.body.i1268
- br i1 false, label %while.body.i1268, label %mpath_parent.exit1277
-
-while.body.i1268: ; preds = %land.rhs.i74.i1274, %land.rhs.i.i1245
- br i1 false, label %mpath_parent.exit1277, label %land.rhs.i74.i1274
-
-land.rhs.i84.i1248: ; preds = %while.body4.i1252, %land.rhs.i.i1245
- br i1 false, label %while.end6.i1258, label %while.body4.i1252
-
-while.body4.i1252: ; preds = %land.rhs.i84.i1248
- br i1 false, label %mpath_parent.exit1277, label %land.rhs.i84.i1248
-
-while.end6.i1258: ; preds = %land.rhs.i84.i1248
- br i1 false, label %land.rhs.i99.i1261, label %mpath_parent.exit1277
-
-land.rhs.i99.i1261: ; preds = %while.body13.i1265, %while.end6.i1258
- br i1 false, label %while.body13.i1265, label %mpath_parent.exit1277
-
-while.body13.i1265: ; preds = %land.rhs.i99.i1261
- br i1 false, label %land.rhs.i99.i1261, label %mpath_parent.exit1277
-
-mpath_parent.exit1277: ; preds = %while.body13.i1265, %land.rhs.i99.i1261, %while.end6.i1258, %while.body4.i1252, %while.body.i1268, %land.rhs.i74.i1274, %_mstr_assert_.exit1241
- br i1 false, label %mstr_eq.exit.i1283, label %if.then.i1281
-
-mstr_eq.exit.i1283: ; preds = %mpath_parent.exit1277
- br i1 false, label %_mstr_assert_.exit1286, label %if.then.i1281
-
-if.then.i1281: ; preds = %mstr_eq.exit.i1283, %mpath_parent.exit1277
- unreachable
-
-_mstr_assert_.exit1286: ; preds = %mstr_eq.exit.i1283
- br i1 false, label %mpath_parent.exit1322, label %land.rhs.i.i1290
-
-land.rhs.i.i1290: ; preds = %_mstr_assert_.exit1286
- br i1 false, label %while.body.i1313, label %land.rhs.i84.i1293
-
-land.rhs.i74.i1319: ; preds = %while.body.i1313
- br i1 false, label %while.body.i1313, label %mpath_parent.exit1322
-
-while.body.i1313: ; preds = %land.rhs.i74.i1319, %land.rhs.i.i1290
- br i1 false, label %mpath_parent.exit1322, label %land.rhs.i74.i1319
-
-land.rhs.i84.i1293: ; preds = %while.body4.i1297, %land.rhs.i.i1290
- br i1 false, label %while.end6.i1303, label %while.body4.i1297
-
-while.body4.i1297: ; preds = %land.rhs.i84.i1293
- br i1 false, label %mpath_parent.exit1322, label %land.rhs.i84.i1293
-
-while.end6.i1303: ; preds = %land.rhs.i84.i1293
- br i1 false, label %land.rhs.i99.i1306, label %mpath_parent.exit1322
-
-land.rhs.i99.i1306: ; preds = %while.body13.i1310, %while.end6.i1303
- br i1 false, label %while.body13.i1310, label %mpath_parent.exit1322
-
-while.body13.i1310: ; preds = %land.rhs.i99.i1306
- br i1 false, label %land.rhs.i99.i1306, label %mpath_parent.exit1322
-
-mpath_parent.exit1322: ; preds = %while.body13.i1310, %land.rhs.i99.i1306, %while.end6.i1303, %while.body4.i1297, %while.body.i1313, %land.rhs.i74.i1319, %_mstr_assert_.exit1286
- br i1 false, label %mstr_eq.exit.i1328, label %if.then.i1326
-
-mstr_eq.exit.i1328: ; preds = %mpath_parent.exit1322
- br i1 false, label %_mstr_assert_.exit1331, label %if.then.i1326
-
-if.then.i1326: ; preds = %mstr_eq.exit.i1328, %mpath_parent.exit1322
- unreachable
-
-_mstr_assert_.exit1331: ; preds = %mstr_eq.exit.i1328
- br i1 false, label %mpath_parent.exit1367, label %land.rhs.i.i1335
-
-land.rhs.i.i1335: ; preds = %_mstr_assert_.exit1331
- br i1 false, label %while.body.i1358, label %land.rhs.i84.i1338
-
-land.rhs.i74.i1364: ; preds = %while.body.i1358
- br i1 false, label %while.body.i1358, label %mpath_parent.exit1367
-
-while.body.i1358: ; preds = %land.rhs.i74.i1364, %land.rhs.i.i1335
- br i1 false, label %mpath_parent.exit1367, label %land.rhs.i74.i1364
-
-land.rhs.i84.i1338: ; preds = %while.body4.i1342, %land.rhs.i.i1335
- br i1 false, label %while.end6.i1348, label %while.body4.i1342
-
-while.body4.i1342: ; preds = %land.rhs.i84.i1338
- br i1 false, label %mpath_parent.exit1367, label %land.rhs.i84.i1338
-
-while.end6.i1348: ; preds = %land.rhs.i84.i1338
- br i1 false, label %land.rhs.i99.i1351, label %mpath_parent.exit1367
-
-land.rhs.i99.i1351: ; preds = %while.body13.i1355, %while.end6.i1348
- br i1 false, label %while.body13.i1355, label %mpath_parent.exit1367
-
-while.body13.i1355: ; preds = %land.rhs.i99.i1351
- br i1 false, label %land.rhs.i99.i1351, label %mpath_parent.exit1367
-
-mpath_parent.exit1367: ; preds = %while.body13.i1355, %land.rhs.i99.i1351, %while.end6.i1348, %while.body4.i1342, %while.body.i1358, %land.rhs.i74.i1364, %_mstr_assert_.exit1331
- br i1 false, label %mstr_eq.exit.i1373, label %if.then.i1371
-
-mstr_eq.exit.i1373: ; preds = %mpath_parent.exit1367
- br i1 false, label %_mstr_assert_.exit1376, label %if.then.i1371
-
-if.then.i1371: ; preds = %mstr_eq.exit.i1373, %mpath_parent.exit1367
- unreachable
-
-_mstr_assert_.exit1376: ; preds = %mstr_eq.exit.i1373
- br i1 false, label %mpath_filename.exit, label %if.end.i
-
-if.end.i: ; preds = %_mstr_assert_.exit1376
- br label %while.cond.i
-
-while.cond.i: ; preds = %land.rhs.i, %if.end.i
- br i1 false, label %while.end.i, label %land.rhs.i
-
-land.rhs.i: ; preds = %while.cond.i
- br i1 false, label %while.end.i, label %while.cond.i
-
-while.end.i: ; preds = %land.rhs.i, %while.cond.i
- br i1 false, label %mpath_filename.exit, label %if.end8.i
-
-if.end8.i: ; preds = %while.end.i
- br label %mpath_filename.exit
-
-mpath_filename.exit: ; preds = %if.end8.i, %while.end.i, %_mstr_assert_.exit1376
- br i1 false, label %mstr_eq.exit.i1391, label %if.then.i1389
-
-mstr_eq.exit.i1391: ; preds = %mpath_filename.exit
- br i1 false, label %_mstr_assert_.exit1394, label %if.then.i1389
-
-if.then.i1389: ; preds = %mstr_eq.exit.i1391, %mpath_filename.exit
- unreachable
-
-_mstr_assert_.exit1394: ; preds = %mstr_eq.exit.i1391
- br i1 false, label %mpath_filename.exit1419, label %if.end.i1398
-
-if.end.i1398: ; preds = %_mstr_assert_.exit1394
- br label %while.cond.i1400
-
-while.cond.i1400: ; preds = %land.rhs.i1403, %if.end.i1398
- br i1 false, label %while.end.i1406, label %land.rhs.i1403
-
-land.rhs.i1403: ; preds = %while.cond.i1400
- br i1 false, label %while.end.i1406, label %while.cond.i1400
-
-while.end.i1406: ; preds = %land.rhs.i1403, %while.cond.i1400
- br i1 false, label %mpath_filename.exit1419, label %if.end8.i1411
-
-if.end8.i1411: ; preds = %while.end.i1406
- br label %mpath_filename.exit1419
-
-mpath_filename.exit1419: ; preds = %if.end8.i1411, %while.end.i1406, %_mstr_assert_.exit1394
- br i1 false, label %mstr_eq.exit.i1425, label %if.then.i1423
-
-mstr_eq.exit.i1425: ; preds = %mpath_filename.exit1419
- br i1 false, label %_mstr_assert_.exit1428, label %if.then.i1423
-
-if.then.i1423: ; preds = %mstr_eq.exit.i1425, %mpath_filename.exit1419
- unreachable
-
-_mstr_assert_.exit1428: ; preds = %mstr_eq.exit.i1425
- br i1 false, label %mpath_filename.exit1453, label %if.end.i1432
-
-if.end.i1432: ; preds = %_mstr_assert_.exit1428
- br label %while.cond.i1434
-
-while.cond.i1434: ; preds = %land.rhs.i1437, %if.end.i1432
- br i1 false, label %while.end.i1440, label %land.rhs.i1437
-
-land.rhs.i1437: ; preds = %while.cond.i1434
- br i1 false, label %while.end.i1440, label %while.cond.i1434
-
-while.end.i1440: ; preds = %land.rhs.i1437, %while.cond.i1434
- br i1 false, label %mpath_filename.exit1453, label %if.end8.i1445
-
-if.end8.i1445: ; preds = %while.end.i1440
- br label %mpath_filename.exit1453
-
-mpath_filename.exit1453: ; preds = %if.end8.i1445, %while.end.i1440, %_mstr_assert_.exit1428
- br i1 false, label %mstr_eq.exit.i1459, label %if.then.i1457
-
-mstr_eq.exit.i1459: ; preds = %mpath_filename.exit1453
- br i1 false, label %_mstr_assert_.exit1462, label %if.then.i1457
-
-if.then.i1457: ; preds = %mstr_eq.exit.i1459, %mpath_filename.exit1453
- unreachable
-
-_mstr_assert_.exit1462: ; preds = %mstr_eq.exit.i1459
- br i1 false, label %mpath_filename.exit1487, label %if.end.i1466
-
-if.end.i1466: ; preds = %_mstr_assert_.exit1462
- br label %while.cond.i1468
-
-while.cond.i1468: ; preds = %land.rhs.i1471, %if.end.i1466
- br i1 false, label %while.end.i1474, label %land.rhs.i1471
-
-land.rhs.i1471: ; preds = %while.cond.i1468
- br i1 false, label %while.end.i1474, label %while.cond.i1468
-
-while.end.i1474: ; preds = %land.rhs.i1471, %while.cond.i1468
- br i1 false, label %mpath_filename.exit1487, label %if.end8.i1479
-
-if.end8.i1479: ; preds = %while.end.i1474
- br label %mpath_filename.exit1487
-
-mpath_filename.exit1487: ; preds = %if.end8.i1479, %while.end.i1474, %_mstr_assert_.exit1462
- br i1 false, label %mstr_eq.exit.i1493, label %if.then.i1491
-
-mstr_eq.exit.i1493: ; preds = %mpath_filename.exit1487
- br i1 false, label %_mstr_assert_.exit1496, label %if.then.i1491
-
-if.then.i1491: ; preds = %mstr_eq.exit.i1493, %mpath_filename.exit1487
- unreachable
-
-_mstr_assert_.exit1496: ; preds = %mstr_eq.exit.i1493
- br i1 false, label %mpath_filename.exit1521, label %if.end.i1500
-
-if.end.i1500: ; preds = %_mstr_assert_.exit1496
- br label %while.cond.i1502
-
-while.cond.i1502: ; preds = %land.rhs.i1505, %if.end.i1500
- br i1 false, label %while.end.i1508, label %land.rhs.i1505
-
-land.rhs.i1505: ; preds = %while.cond.i1502
- br i1 false, label %while.end.i1508, label %while.cond.i1502
-
-while.end.i1508: ; preds = %land.rhs.i1505, %while.cond.i1502
- br i1 false, label %mpath_filename.exit1521, label %if.end8.i1513
-
-if.end8.i1513: ; preds = %while.end.i1508
- br label %mpath_filename.exit1521
-
-mpath_filename.exit1521: ; preds = %if.end8.i1513, %while.end.i1508, %_mstr_assert_.exit1496
- br i1 false, label %mstr_eq.exit.i1527, label %if.then.i1525
-
-mstr_eq.exit.i1527: ; preds = %mpath_filename.exit1521
- br i1 false, label %_mstr_assert_.exit1530, label %if.then.i1525
-
-if.then.i1525: ; preds = %mstr_eq.exit.i1527, %mpath_filename.exit1521
- unreachable
-
-_mstr_assert_.exit1530: ; preds = %mstr_eq.exit.i1527
- br i1 false, label %mpath_filename.exit1555, label %if.end.i1534
-
-if.end.i1534: ; preds = %_mstr_assert_.exit1530
- br label %while.cond.i1536
-
-while.cond.i1536: ; preds = %land.rhs.i1539, %if.end.i1534
- br i1 false, label %while.end.i1542, label %land.rhs.i1539
-
-land.rhs.i1539: ; preds = %while.cond.i1536
- br i1 false, label %while.end.i1542, label %while.cond.i1536
-
-while.end.i1542: ; preds = %land.rhs.i1539, %while.cond.i1536
- br i1 false, label %mpath_filename.exit1555, label %if.end8.i1547
-
-if.end8.i1547: ; preds = %while.end.i1542
- br label %mpath_filename.exit1555
-
-mpath_filename.exit1555: ; preds = %if.end8.i1547, %while.end.i1542, %_mstr_assert_.exit1530
- br i1 false, label %mstr_eq.exit.i1561, label %if.then.i1559
-
-mstr_eq.exit.i1561: ; preds = %mpath_filename.exit1555
- br i1 false, label %_mstr_assert_.exit1564, label %if.then.i1559
-
-if.then.i1559: ; preds = %mstr_eq.exit.i1561, %mpath_filename.exit1555
- unreachable
-
-_mstr_assert_.exit1564: ; preds = %mstr_eq.exit.i1561
- br i1 false, label %mpath_filename.exit1589, label %if.end.i1568
-
-if.end.i1568: ; preds = %_mstr_assert_.exit1564
- br label %while.cond.i1570
-
-while.cond.i1570: ; preds = %land.rhs.i1573, %if.end.i1568
- br i1 false, label %while.end.i1576, label %land.rhs.i1573
-
-land.rhs.i1573: ; preds = %while.cond.i1570
- br i1 false, label %while.end.i1576, label %while.cond.i1570
-
-while.end.i1576: ; preds = %land.rhs.i1573, %while.cond.i1570
- br i1 false, label %mpath_filename.exit1589, label %if.end8.i1581
-
-if.end8.i1581: ; preds = %while.end.i1576
- br label %mpath_filename.exit1589
-
-mpath_filename.exit1589: ; preds = %if.end8.i1581, %while.end.i1576, %_mstr_assert_.exit1564
- br i1 false, label %mstr_eq.exit.i1595, label %if.then.i1593
-
-mstr_eq.exit.i1595: ; preds = %mpath_filename.exit1589
- br i1 false, label %_mstr_assert_.exit1598, label %if.then.i1593
-
-if.then.i1593: ; preds = %mstr_eq.exit.i1595, %mpath_filename.exit1589
- unreachable
-
-_mstr_assert_.exit1598: ; preds = %mstr_eq.exit.i1595
- br i1 false, label %mpath_filename.exit1623, label %if.end.i1602
-
-if.end.i1602: ; preds = %_mstr_assert_.exit1598
- br label %while.cond.i1604
-
-while.cond.i1604: ; preds = %land.rhs.i1607, %if.end.i1602
- br i1 false, label %while.end.i1610, label %land.rhs.i1607
-
-land.rhs.i1607: ; preds = %while.cond.i1604
- br i1 false, label %while.end.i1610, label %while.cond.i1604
-
-while.end.i1610: ; preds = %land.rhs.i1607, %while.cond.i1604
- br i1 false, label %mpath_filename.exit1623, label %if.end8.i1615
-
-if.end8.i1615: ; preds = %while.end.i1610
- br label %mpath_filename.exit1623
-
-mpath_filename.exit1623: ; preds = %if.end8.i1615, %while.end.i1610, %_mstr_assert_.exit1598
- br i1 false, label %mstr_eq.exit.i1629, label %if.then.i1627
-
-mstr_eq.exit.i1629: ; preds = %mpath_filename.exit1623
- br i1 false, label %_mstr_assert_.exit1632, label %if.then.i1627
-
-if.then.i1627: ; preds = %mstr_eq.exit.i1629, %mpath_filename.exit1623
- unreachable
-
-_mstr_assert_.exit1632: ; preds = %mstr_eq.exit.i1629
- br i1 false, label %mstr_eq.exit.i1645, label %if.then.i1643
-
-mstr_eq.exit.i1645: ; preds = %_mstr_assert_.exit1632
- br i1 false, label %_mstr_assert_.exit1648, label %if.then.i1643
-
-if.then.i1643: ; preds = %mstr_eq.exit.i1645, %_mstr_assert_.exit1632
- unreachable
-
-_mstr_assert_.exit1648: ; preds = %mstr_eq.exit.i1645
- br i1 false, label %mstr_eq.exit.i1672, label %if.then.i1670
-
-mstr_eq.exit.i1672: ; preds = %_mstr_assert_.exit1648
- br i1 false, label %_mstr_assert_.exit1675, label %if.then.i1670
-
-if.then.i1670: ; preds = %mstr_eq.exit.i1672, %_mstr_assert_.exit1648
- unreachable
-
-_mstr_assert_.exit1675: ; preds = %mstr_eq.exit.i1672
- br i1 false, label %mstr_eq.exit.i1699, label %if.then.i1697
-
-mstr_eq.exit.i1699: ; preds = %_mstr_assert_.exit1675
- br i1 false, label %_mstr_assert_.exit1702, label %if.then.i1697
-
-if.then.i1697: ; preds = %mstr_eq.exit.i1699, %_mstr_assert_.exit1675
- unreachable
-
-_mstr_assert_.exit1702: ; preds = %mstr_eq.exit.i1699
- br i1 false, label %mstr_eq.exit.i1726, label %if.then.i1724
-
-mstr_eq.exit.i1726: ; preds = %_mstr_assert_.exit1702
- br i1 false, label %_mstr_assert_.exit1729, label %if.then.i1724
-
-if.then.i1724: ; preds = %mstr_eq.exit.i1726, %_mstr_assert_.exit1702
- unreachable
-
-_mstr_assert_.exit1729: ; preds = %mstr_eq.exit.i1726
- br i1 false, label %mstr_eq.exit.i1753, label %if.then.i1751
-
-mstr_eq.exit.i1753: ; preds = %_mstr_assert_.exit1729
- br i1 false, label %_mstr_assert_.exit1756, label %if.then.i1751
-
-if.then.i1751: ; preds = %mstr_eq.exit.i1753, %_mstr_assert_.exit1729
- unreachable
-
-_mstr_assert_.exit1756: ; preds = %mstr_eq.exit.i1753
+mpath_parent.exit820: ; preds = %entry, %land.rhs.i74.us.i, %while.body.us.i
+ %path.coerce.fca.0.extract.sink.i814 = phi i32 [ 0, %entry ], [ %path.coerce.fca.0.extract.i75.us.i, %land.rhs.i74.us.i ], [ 0, %while.body.us.i ]
ret i32 0
; uselistorder directives
uselistorder [2 x i32] %0, { 1, 0 }
}
-
-; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
-declare void @llvm.lifetime.start.p0(ptr captures(none)) #0
-
-; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
-declare void @llvm.lifetime.end.p0(ptr captures(none)) #0
-
-; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
-declare void @llvm.memcpy.p0.p0.i32(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i32, i1 immarg) #1
-
-; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite)
-declare void @llvm.experimental.noalias.scope.decl(metadata) #2
-
-; Function Attrs: nocallback nocreateundeforpoison nofree nosync nounwind speculatable willreturn memory(none)
-declare i32 @llvm.umin.i32(i32, i32) #3
-
-attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
-attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
-attributes #2 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
-attributes #3 = { nocallback nocreateundeforpoison nofree nosync nounwind speculatable willreturn memory(none) }
>From 34691d56675aba4ae38608b823859c2f7a0deb4c Mon Sep 17 00:00:00 2001
From: Sharjeel Khan <sharjeelkhan at google.com>
Date: Sun, 5 Apr 2026 19:57:37 +0000
Subject: [PATCH 07/10] Use reduced test case given by reviewer
---
.../CorrelatedValuePropagation/pr187381.ll | 38 ++++++-------------
1 file changed, 12 insertions(+), 26 deletions(-)
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll b/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
index 342491611011b..dafb04bc8597e 100644
--- a/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
@@ -4,38 +4,24 @@
define i32 @main() {
; CHECK-LABEL: define i32 @main() {
; CHECK-NEXT: [[ENTRY:.*]]:
-; CHECK-NEXT: br label %[[MPATH_PARENT_EXIT820:.*]]
-; CHECK: [[LAND_RHS_I74_US_I:.*]]:
+; CHECK-NEXT: br label %[[EXIT:.*]]
+; CHECK: [[UNREACHABLE_BLOCK:.*]]:
; CHECK-NEXT: [[TMP0:%.*]] = insertvalue [2 x i32] [[TMP0]], i32 0, 1
-; CHECK-NEXT: [[PATH_COERCE_FCA_0_EXTRACT_I75_US_I:%.*]] = extractvalue [2 x i32] [[TMP0]], 0
-; CHECK-NEXT: switch i8 0, label %[[MPATH_PARENT_EXIT820]] [
-; CHECK-NEXT: i8 92, label %[[WHILE_BODY_US_I:.*]]
-; CHECK-NEXT: i8 47, label %[[WHILE_BODY_US_I]]
-; CHECK-NEXT: ]
-; CHECK: [[WHILE_BODY_US_I]]:
-; CHECK-NEXT: br i1 false, label %[[MPATH_PARENT_EXIT820]], label %[[LAND_RHS_I74_US_I]]
-; CHECK: [[MPATH_PARENT_EXIT820]]:
-; CHECK-NEXT: [[PATH_COERCE_FCA_0_EXTRACT_SINK_I814:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[PATH_COERCE_FCA_0_EXTRACT_I75_US_I]], %[[LAND_RHS_I74_US_I]] ], [ 0, %[[WHILE_BODY_US_I]] ]
+; CHECK-NEXT: [[EXTRACT_VALUE:%.*]] = extractvalue [2 x i32] [[TMP0]], 0
+; CHECK-NEXT: br label %[[EXIT]]
+; CHECK: [[EXIT]]:
+; CHECK-NEXT: [[SINK_VALUE:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[EXTRACT_VALUE]], %[[UNREACHABLE_BLOCK]] ]
; CHECK-NEXT: ret i32 0
;
entry:
- br label %mpath_parent.exit820
+ br label %exit
-land.rhs.i74.us.i: ; preds = %while.body.us.i
+unreachable.block: ; No predecessors!
%0 = insertvalue [2 x i32] %0, i32 0, 1
- %path.coerce.fca.0.extract.i75.us.i = extractvalue [2 x i32] %0, 0
- switch i8 0, label %mpath_parent.exit820 [
- i8 92, label %while.body.us.i
- i8 47, label %while.body.us.i
- ]
+ %extract.value = extractvalue [2 x i32] %0, 0
+ br label %exit
-while.body.us.i: ; preds = %land.rhs.i74.us.i, %land.rhs.i74.us.i
- br i1 false, label %mpath_parent.exit820, label %land.rhs.i74.us.i
-
-mpath_parent.exit820: ; preds = %entry, %land.rhs.i74.us.i, %while.body.us.i
- %path.coerce.fca.0.extract.sink.i814 = phi i32 [ 0, %entry ], [ %path.coerce.fca.0.extract.i75.us.i, %land.rhs.i74.us.i ], [ 0, %while.body.us.i ]
+exit: ; preds = %unreachable.block, %entry
+ %sink.value = phi i32 [ 0, %entry ], [ %extract.value, %unreachable.block ]
ret i32 0
-
-; uselistorder directives
- uselistorder [2 x i32] %0, { 1, 0 }
}
>From 16187b051e56162d21dfd00f64a2e025dde99efc Mon Sep 17 00:00:00 2001
From: Sharjeel Khan <sharjeelkhan at google.com>
Date: Sun, 5 Apr 2026 20:53:49 +0000
Subject: [PATCH 08/10] Change from self-referential check to checks for
chained insertvalues also
---
llvm/lib/Analysis/InstructionSimplify.cpp | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index 51ae63bfbe0e2..f13fe7a1b3496 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -5455,7 +5455,17 @@ static Value *simplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
// extractvalue x, (insertvalue y, elt, n), n -> elt
unsigned NumIdxs = Idxs.size();
- for (auto *IVI = dyn_cast<InsertValueInst>(Agg); IVI != nullptr;) {
+ SmallPtrSet<InsertValueInst *, 8> visitedSet;
+ for (auto *IVI = dyn_cast<InsertValueInst>(Agg); IVI != nullptr;
+ IVI = dyn_cast<InsertValueInst>(IVI->getAggregateOperand())) {
+ // Based on the verifier, self-referential insertvalues or cylic across
+ // many insertvalues are apparently fine in unreachable blocks and they
+ // will cause this loop to run infinitely. I am just adding a check to
+ // break out if it is the case.
+ if (!visitedSet.insert(IVI).second){
+ break;
+ }
+
ArrayRef<unsigned> InsertValueIdxs = IVI->getIndices();
unsigned NumInsertValueIdxs = InsertValueIdxs.size();
unsigned NumCommonIdxs = std::min(NumInsertValueIdxs, NumIdxs);
@@ -5465,14 +5475,6 @@ static Value *simplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
return IVI->getInsertedValueOperand();
break;
}
-
- // Based on the verifier, self-referential insertvalues are apparently
- // fine in unreachable blocks and they will cause this loop to run
- // infinitely. I am just adding a check to break out if it is the case.
- auto *NewIVI = dyn_cast<InsertValueInst>(IVI->getAggregateOperand());
- if (IVI == NewIVI)
- break;
- IVI = NewIVI;
}
// Simplify umul_with_overflow where one operand is 1.
>From eaedcacb1342c164beaed2c7286732fcf7c3e979 Mon Sep 17 00:00:00 2001
From: Sharjeel Khan <sharjeelkhan at google.com>
Date: Sun, 5 Apr 2026 21:31:43 +0000
Subject: [PATCH 09/10] Added a testcase with cycle across many insertvalue
instructions
---
.../CorrelatedValuePropagation/pr187381.ll | 35 +++++++++++++++++--
1 file changed, 33 insertions(+), 2 deletions(-)
diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll b/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
index dafb04bc8597e..80ddf0a6aedd8 100644
--- a/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
+++ b/llvm/test/Transforms/CorrelatedValuePropagation/pr187381.ll
@@ -1,8 +1,8 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s
-define i32 @main() {
-; CHECK-LABEL: define i32 @main() {
+define i32 @insertvalue_selfreferential() {
+; CHECK-LABEL: define i32 @insertvalue_selfreferential() {
; CHECK-NEXT: [[ENTRY:.*]]:
; CHECK-NEXT: br label %[[EXIT:.*]]
; CHECK: [[UNREACHABLE_BLOCK:.*]]:
@@ -25,3 +25,34 @@ exit: ; preds = %unreachable.block, %entry
%sink.value = phi i32 [ 0, %entry ], [ %extract.value, %unreachable.block ]
ret i32 0
}
+
+define i32 @insertvalue_longchain() {
+; CHECK-LABEL: define i32 @insertvalue_longchain() {
+; CHECK-NEXT: [[ENTRY:.*]]:
+; CHECK-NEXT: br label %[[EXIT:.*]]
+; CHECK: [[UNREACHABLE_BLOCK:.*]]:
+; CHECK-NEXT: [[TMP0:%.*]] = insertvalue [2 x i32] [[TMP3:%.*]], i32 0, 1
+; CHECK-NEXT: [[TMP1:%.*]] = insertvalue [2 x i32] [[TMP0]], i32 0, 1
+; CHECK-NEXT: [[TMP2:%.*]] = insertvalue [2 x i32] [[TMP1]], i32 0, 1
+; CHECK-NEXT: [[TMP3]] = insertvalue [2 x i32] [[TMP2]], i32 0, 1
+; CHECK-NEXT: [[EXTRACT_VALUE:%.*]] = extractvalue [2 x i32] [[TMP3]], 0
+; CHECK-NEXT: br label %[[EXIT]]
+; CHECK: [[EXIT]]:
+; CHECK-NEXT: [[SINK_VALUE:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[EXTRACT_VALUE]], %[[UNREACHABLE_BLOCK]] ]
+; CHECK-NEXT: ret i32 0
+;
+entry:
+ br label %exit
+
+unreachable.block: ; No predecessors!
+ %0 = insertvalue [2 x i32] %3, i32 0, 1
+ %1 = insertvalue [2 x i32] %0, i32 0, 1
+ %2 = insertvalue [2 x i32] %1, i32 0, 1
+ %3 = insertvalue [2 x i32] %2, i32 0, 1
+ %extract.value = extractvalue [2 x i32] %3, 0
+ br label %exit
+
+exit: ; preds = %unreachable.block, %entry
+ %sink.value = phi i32 [ 0, %entry ], [ %extract.value, %unreachable.block ]
+ ret i32 0
+}
>From b95cf9139ef85368fad23258996c2a87657d97d7 Mon Sep 17 00:00:00 2001
From: Sharjeel Khan <sharjeelkhan at google.com>
Date: Sun, 5 Apr 2026 21:44:17 +0000
Subject: [PATCH 10/10] Clang-format fix
---
llvm/lib/Analysis/InstructionSimplify.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index f13fe7a1b3496..9a331a00e5072 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -5462,10 +5462,10 @@ static Value *simplifyExtractValueInst(Value *Agg, ArrayRef<unsigned> Idxs,
// many insertvalues are apparently fine in unreachable blocks and they
// will cause this loop to run infinitely. I am just adding a check to
// break out if it is the case.
- if (!visitedSet.insert(IVI).second){
+ if (!visitedSet.insert(IVI).second) {
break;
}
-
+
ArrayRef<unsigned> InsertValueIdxs = IVI->getIndices();
unsigned NumInsertValueIdxs = InsertValueIdxs.size();
unsigned NumCommonIdxs = std::min(NumInsertValueIdxs, NumIdxs);
More information about the llvm-commits
mailing list