Bug type: crash
Component: SLPVectorizer
Bug location: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp: BoUpSLP::reorderBottomToTop
Issue title: [clang] Crash at -O3: Assertion `OpTE1.isSame..."' failed.
Labels: llvm:SLPVectorizer
crash-on-valid
Reported by: cardigan1008

This code crashes at `-O3`:

```c
int a, b, c, d;
void *malloc();
void e(int f) {
  int *g = malloc(sizeof(int));
  for (; d; d++) {
    b = 0;
    for (; b < f - 1; b++) {
      c = b + 1;
      for (; c < f; c++)
        a += (g[b] + g[c]) % 2;
    }
  }
}
void h() { e(1 + 16); }
```

Compiler Explorer: https://godbolt.org/z/h3h3qe174

Crash:

```console
clang: /root/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:17358: llvm::Value* llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*): Assertion `OpTE1.isSame( ArrayRef(E->Scalars).take_front(OpTE1.getVectorFactor())) && "Expected same first part of scalars."' failed.
```

Backtrace:

```console
Stack dump:
0.	Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/clang -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -fno-verbose-asm -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -O3 <source>
1.	<eof> parser at end of file
2.	Optimizer
3.	Running pass "function<eager-inv>(float2int,lower-constant-intrinsics,chr,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O3>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>)" on module "<source>"
4.	Running pass "slp-vectorizer" on function "h"
 #0 0x0000000003ee5798 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3ee5798)
 #1 0x0000000003ee3424 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3ee3424)
 #2 0x0000000003e27f68 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007c46db642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007c46db6969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x00007c46db642476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x00007c46db6287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x00007c46db62871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x00007c46db639e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x0000000005b118bd llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5b118bd)
#10 0x0000000005b0b18e llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5b0b18e)
#11 0x0000000005b0c98d llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5b0c98d)
#12 0x0000000005b0acc2 llvm::slpvectorizer::BoUpSLP::vectorizeOperand(llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5b0acc2)
#13 0x0000000005b0c98d llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5b0c98d)
#14 0x0000000005b2fdc4 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::SmallDenseSet<llvm::Value*, 4u, llvm::DenseMapInfo<llvm::Value*, void>> const&, llvm::Instruction*, llvm::ArrayRef<std::tuple<llvm::Value*, unsigned int, bool>>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5b2fdc4)
#15 0x0000000005b449ff (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::DataLayout const&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&, llvm::AssumptionCache*) SLPVectorizer.cpp:0:0
#16 0x0000000005b476cf llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5b476cf)
#17 0x0000000005b4bee0 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5b4bee0)
#18 0x0000000005b50846 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5b50846)
#19 0x0000000005b5749e llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (.part.0) SLPVectorizer.cpp:0:0
#20 0x0000000005b5805b llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5b5805b)
#21 0x00000000055bd0ee llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x55bd0ee)
#22 0x00000000038884b0 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x38884b0)
#23 0x00000000011f0b2e llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x11f0b2e)
#24 0x0000000003886d83 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3886d83)
#25 0x00000000011efa6e llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x11efa6e)
#26 0x0000000003886790 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3886790)
#27 0x0000000004198802 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&, clang::BackendConsumer*) BackendUtil.cpp:0:0
#28 0x000000000419bfab clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x419bfab)
#29 0x000000000487fea0 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x487fea0)
#30 0x00000000065342ec clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x65342ec)
#31 0x0000000004880288 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x4880288)
#32 0x0000000004b72995 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x4b72995)
#33 0x0000000004af188e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x4af188e)
#34 0x0000000004c6226e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x4c6226e)
#35 0x0000000000d9ee9f cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xd9ee9f)
#36 0x0000000000d965aa ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#37 0x00000000048e6769 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#38 0x0000000003e28404 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3e28404)
#39 0x00000000048e6d7f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#40 0x00000000048a91dd clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x48a91dd)
#41 0x00000000048aa26e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x48aa26e)
#42 0x00000000048b20c5 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x48b20c5)
#43 0x0000000000d9bbe8 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xd9bbe8)
#44 0x0000000000c265e4 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xc265e4)
#45 0x00007c46db629d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#46 0x00007c46db629e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#47 0x0000000000d96055 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xd96055)
```



Comments: author: cardigan1008
body: This issue seems to be related to https://github.com/llvm/llvm-project/issues/130972. cc @alexey-bataev 
author: dtcxzyw
body: Reduced reproducer: https://godbolt.org/z/6b31EPqqr


Fix patch:
commit af28c9c65a23806a09d7929792df5ed2e9bdf946
Author: Alexey Bataev <a.bataev@outlook.com>
Date:   Wed Apr 16 06:20:34 2025 -0700

    [SLP]Do not reorder split node operand with reuses, if not possible
    
    Need to check if the operand node of the split vectorize node has reuses
    and check if it is possible to build the order for this node to reorder
    it correctly.
    
    Fixes #135912

diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index f9acc276f37f..f97386159d02 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -7479,8 +7479,8 @@ void BoUpSLP::reorderBottomToTop(bool IgnoreReorder) {
         for (const auto &P : Data.first->CombinedEntriesWithIndices) {
           TreeEntry &OpTE = *VectorizableTree[P.first].get();
           OrdersType Order = OpTE.ReorderIndices;
-          if (Order.empty()) {
-            if (!OpTE.isGather())
+          if (Order.empty() || !OpTE.ReuseShuffleIndices.empty()) {
+            if (!OpTE.isGather() && OpTE.ReuseShuffleIndices.empty())
               continue;
             const auto BestOrder =
                 getReorderingData(OpTE, /*TopToBottom=*/false, IgnoreReorder);


Regression tests:
file: llvm/test/Transforms/SLPVectorizer/X86/split-vector-operand-with-reuses.ll
commands: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s
tests: test_name: <module>
test_body: 
define void @test(ptr %p) {
;
entry:
  %arrayidx7.us.i.841 = getelementptr i8, ptr %p, i64 36
  %arrayidx7.us.i.946 = getelementptr i8, ptr %p, i64 40
  %arrayidx7.us.i.1051 = getelementptr i8, ptr %p, i64 44
  %arrayidx7.us.i.1156 = getelementptr i8, ptr %p, i64 48
  %arrayidx7.us.i.1261 = getelementptr i8, ptr %p, i64 52
  %arrayidx7.us.i.1366 = getelementptr i8, ptr %p, i64 56
  %arrayidx7.us.i.1471 = getelementptr i8, ptr %p, i64 60
  %arrayidx7.us.i.1576 = getelementptr i8, ptr %p, i64 64
  %add8.us.i.1.4 = add i32 0, 0
  %rem.us.i.1.4 = srem i32 %add8.us.i.1.4, 1
  %add8.us.i.1.5 = add i32 0, 0
  %rem.us.i.1.5 = srem i32 %add8.us.i.1.5, 1
  %invariant.op91 = add i32 %rem.us.i.1.4, %rem.us.i.1.5
  %add8.us.i.1.6 = add i32 0, 0
  %rem.us.i.1.6 = srem i32 %add8.us.i.1.6, 1
  %invariant.op92 = add i32 %invariant.op91, %rem.us.i.1.6
  %0 = load i32, ptr %arrayidx7.us.i.841, align 4
  %1 = load i32, ptr %arrayidx7.us.i.946, align 4
  %2 = load i32, ptr %arrayidx7.us.i.1051, align 4
  %3 = load i32, ptr %arrayidx7.us.i.1156, align 4
  %4 = load i32, ptr %arrayidx7.us.i.1261, align 4
  %5 = load i32, ptr %arrayidx7.us.i.1366, align 4
  %add8.us.i.7.6 = or i32 %5, 0
  %rem.us.i.7.6 = srem i32 %add8.us.i.7.6, 1
  %6 = load i32, ptr %arrayidx7.us.i.1471, align 4
  %add8.us.i.7.7 = or i32 %6, 0
  %rem.us.i.7.7 = srem i32 %add8.us.i.7.7, 1
  %invariant.op165 = add i32 %rem.us.i.7.6, %rem.us.i.7.7
  %7 = load i32, ptr %arrayidx7.us.i.1576, align 4
  %add8.us.i.7.8 = or i32 %7, 0
  %rem.us.i.7.8 = srem i32 %add8.us.i.7.8, 1
  %invariant.op166 = add i32 %invariant.op165, %rem.us.i.7.8
  %add8.us.i.8 = or i32 %0, 0
  %rem.us.i.8 = srem i32 %add8.us.i.8, 1
  %invariant.op167 = add i32 %invariant.op166, %rem.us.i.8
  %add8.us.i.8.1 = or i32 %1, 0
  %rem.us.i.8.1 = srem i32 %add8.us.i.8.1, 1
  %invariant.op168 = add i32 %invariant.op167, %rem.us.i.8.1
  %add8.us.i.8.2 = or i32 %2, 0
  %rem.us.i.8.2 = srem i32 %add8.us.i.8.2, 1
  %invariant.op169 = add i32 %invariant.op168, %rem.us.i.8.2
  %add8.us.i.8.3 = or i32 %3, 0
  %rem.us.i.8.3 = srem i32 %add8.us.i.8.3, 1
  %invariant.op170 = add i32 %invariant.op169, %rem.us.i.8.3
  %add8.us.i.8.4 = or i32 %4, 0
  %rem.us.i.8.4 = srem i32 %add8.us.i.8.4, 1
  %invariant.op171 = add i32 %invariant.op170, %rem.us.i.8.4
  %add8.us.i.8.5 = or i32 %5, 0
  %rem.us.i.8.5 = srem i32 %add8.us.i.8.5, 1
  %invariant.op172 = add i32 %invariant.op171, %rem.us.i.8.5
  %add8.us.i.8.6 = or i32 %6, 0
  %rem.us.i.8.6 = srem i32 %add8.us.i.8.6, 0
  %invariant.op173 = add i32 %invariant.op172, %rem.us.i.8.6
  %add8.us.i.8.7 = or i32 %7, 0
  %rem.us.i.8.7 = srem i32 %add8.us.i.8.7, 0
  %invariant.op174 = add i32 %invariant.op173, %rem.us.i.8.7
  %invariant.op181 = add i32 %invariant.op174, 0
  %invariant.op182 = add i32 %invariant.op181, 0
  %invariant.op183 = add i32 %invariant.op182, 0
  %invariant.op184 = add i32 %invariant.op183, 0
  %invariant.op185 = add i32 %invariant.op184, 0
  %invariant.op186 = add i32 %invariant.op185, 0
  %invariant.op187 = add i32 %invariant.op186, 0
  %invariant.op188 = add i32 %invariant.op187, 0
  %add8.us.i.11.1 = or i32 %4, 0
  %rem.us.i.11.1 = srem i32 %add8.us.i.11.1, 1
  %invariant.op189 = add i32 %invariant.op188, %rem.us.i.11.1
  %add8.us.i.11.2 = add i32 0, 0
  %rem.us.i.11.2 = srem i32 %add8.us.i.11.2, 1
  %invariant.op190 = add i32 %invariant.op189, %rem.us.i.11.2
  %add8.us.i.11.3 = add i32 %6, %2
  %rem.us.i.11.3 = srem i32 %add8.us.i.11.3, 1
  %invariant.op191 = add i32 %invariant.op190, %rem.us.i.11.3
  %add8.us.i.11.4 = add i32 %7, %2
  %rem.us.i.11.4 = srem i32 %add8.us.i.11.4, 1
  %invariant.op192 = add i32 %invariant.op191, %rem.us.i.11.4
  %8 = load i32, ptr %p, align 4
  %add8.us.i.12 = add i32 %4, %8
  %rem.us.i.12 = srem i32 %add8.us.i.12, 1
  %invariant.op193 = add i32 %invariant.op192, %rem.us.i.12
  %add8.us.i.12.1 = add i32 %5, %8
  %rem.us.i.12.1 = srem i32 %add8.us.i.12.1, 1
  %invariant.op194 = add i32 %invariant.op193, %rem.us.i.12.1
  %add8.us.i.12.2 = add i32 0, 0
  %rem.us.i.12.2 = srem i32 %add8.us.i.12.2, 1
  %invariant.op195 = add i32 %invariant.op194, %rem.us.i.12.2
  %add8.us.i.12.3 = add i32 0, 0
  %rem.us.i.12.3 = srem i32 %add8.us.i.12.3, 1
  %invariant.op196 = add i32 %invariant.op195, %rem.us.i.12.3
  %add8.us.i.13 = add i32 0, 0
  %rem.us.i.13 = srem i32 %add8.us.i.13, 0
  %invariant.op197 = add i32 %invariant.op196, %rem.us.i.13
  %add8.us.i.13.1 = add i32 0, 0
  %rem.us.i.13.1 = srem i32 %add8.us.i.13.1, 0
  %invariant.op198 = add i32 %invariant.op197, %rem.us.i.13.1
  %add8.us.i.13.2 = add i32 0, 0
  %rem.us.i.13.2 = srem i32 %add8.us.i.13.2, 1
  %invariant.op199 = add i32 %invariant.op198, %rem.us.i.13.2
  %add8.us.i.14 = add i32 0, 0
  %rem.us.i.14 = srem i32 %add8.us.i.14, 1
  %invariant.op200 = add i32 %invariant.op199, %rem.us.i.14
  %add8.us.i.14.1 = add i32 0, 0
  %rem.us.i.14.1 = srem i32 %add8.us.i.14.1, 1
  %invariant.op201 = add i32 %invariant.op200, %rem.us.i.14.1
  %add8.us.i.15 = add i32 0, 0
  %rem.us.i.15 = srem i32 %add8.us.i.15, 1
  %invariant.op202 = add i32 %invariant.op201, %rem.us.i.15
  br label %for.cond1.preheader.us.i

for.cond1.preheader.us.i:
  %a.promoted253537.us.i = phi i32 [ %add9.us.i.15.reass, %for.cond1.preheader.us.i ], [ 0, %entry ]
  %add9.us.i.15.reass = add i32 %invariant.op92, %invariant.op202
  br label %for.cond1.preheader.us.i
}