<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/108004>108004</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LoopVectorize] Assertion fails when IV start value is used by an exit block PHI
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hazzlim
</td>
</tr>
</table>
<pre>
With the following IR:
```
define i64 @foo(i64 %start, i64 %end) {
entry:
%p1 = alloca [1024 x i32]
%p2 = alloca [1024 x i32]
call void @init_mem(ptr %p1, i64 1024)
call void @init_mem(ptr %p2, i64 1024)
%start2 = and i64 %start, 12345
br label %for.body
for.body:
%ind = phi i64 [ %ind.next, %for.body ], [ %start2, %entry ]
%arrayidx1 = getelementptr inbounds i32, ptr %p1, i64 %ind
%0 = load i32, ptr %arrayidx1, align 4
%arrayidx2 = getelementptr inbounds i32, ptr %p2, i64 %ind
%1 = load i32, ptr %arrayidx2, align 4
%ind.next = add i64 %ind, 1
%cmp = icmp ne i64 %ind.next, %end
br i1 %cmp, label %for.body, label %exit
exit:
%use = phi i64 [ %start2, %for.body ]
ret i64 %use
}
declare void @init_mem(ptr, i64)
```
LV crashes due to hitting the following assertion:
```
LV: Vectorizing: innermost loop.
PHINode should have one entry for each predecessor of its parent basic block!
%bob = phi i64 [ %start2, %for.body ]
opt: /work/llvm-project-wt/nuw-clang-arr/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:10244: bool llvm::LoopVectorizePass::processLoop(Loop *): Assertion `!verif
yFunction(*L->getHeader()->getParent(), &dbgs())' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: ./build/bin/opt -passes=loop-vectorize -force-vector-interleave=2 -force-vector-width=4 -debug test.ll -o - -S
1. Running pass "function(loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>)" on module "test.ll"
2. Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "foo"
#0 0x0000aaaaaec431c0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./build/bin/opt+0x41a31c0)
#1 0x0000aaaaaec4102c llvm::sys::RunSignalHandlers() (./build/bin/opt+0x41a102c)
#2 0x0000aaaaaec438dc SignalHandler(int) Signals.cpp:0:0
#3 0x0000fffff7ffb9d0 (linux-vdso.so.1+0x9d0)
#4 0x0000fffff7b5f200 __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x0000fffff7b1a67c gsignal ./signal/../sysdeps/posix/raise.c:27:6
#6 0x0000fffff7b07130 abort ./stdlib/abort.c:81:7
#7 0x0000fffff7b13fd0 __assert_fail_base ./assert/assert.c:89:7
#8 0x0000fffff7b14040 __assert_perror_fail ./assert/assert-perr.c:31:1
#9 0x0000aaaaadee375c llvm::LoopVectorizePass::processLoop(llvm::Loop*) (./build/bin/opt+0x344375c)
#10 0x0000aaaaadee72d0 llvm::LoopVectorizePass::runImpl(llvm::Function&) (./build/bin/opt+0x34472d0)
#11 0x0000aaaaadee7ac0 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (./build/bin/opt+0x3447ac0)
#12 0x0000aaaaaea9676c llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (./bui
ld/bin/opt+0x3ff676c)
#13 0x0000aaaaaea9a1fc llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (./build/bin/opt+0x3ffa1fc)
#14 0x0000aaaaaea958cc llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (./build/bin/o
pt+0x3ff58cc)
#15 0x0000aaaaab5b3d88 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOu
tputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::Outpu
tKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (./build/bin/opt+0xb13d88)
#16 0x0000aaaaab5a7fc0 optMain (./build/bin/opt+0xb07fc0)
#17 0x0000fffff7b073fc __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#18 0x0000fffff7b074cc call_init ./csu/../csu/libc-start.c:128:20
#19 0x0000fffff7b074cc __libc_start_main ./csu/../csu/libc-start.c:379:5
#20 0x0000aaaaab5a1ef0 _start (./build/bin/opt+0xb01ef0)
```
Seems like we fail to properly handle fixing up the incoming value for this PHI from the middle block.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8WF1z4yzS_TXkpssuCclfF75wknFN6s28m5pMzV66kEA2GwQqQEn8_PqtBtmWPPYk89TuumZiA83p06cbBGLOya0WYkkmt2Ryf8NavzN2uWN__aVkfVMYvl_-U_od-J2Ayihl3qTewsN3kq1Ick-SFZkm3b_Q5KKSWoCc5kDypDKG0Hlo0InzzHpC76BrC80JXQCZ3capQnu7P-ICmjQpkOwemFKmZEAmt2lCc3gHmVEyue8M0Y5-wg5KphS8GsmRmtTSb2pREzpvvI3ODuRwNqGLbt5H0-jlaceQO26aw7kQKc3yycG8sKBYIRRaVMaOUftO4vD32DdQSGoe4JudjPCT2657rMV78NLDA1QDu6JVpNfZBPmhJxehE2Yt20v-HtOwFV4oUQvtMXSpC9Nq7oLI9A5-UTHS6KElAUUZxs_mHN1gH1NyqyG_wIL-AQt6lUX6EQt6mcVB0phNzvvomMueaVk3wUrij8Nq-CUp4kSrsCDTbiaO_loI_U7xLn2_MkJ7UBWtE4HAeVkMEj4oim6uFf7AtnWiczK773vjolTMiisropP9uAzOtof49_EnlJa5nXDAWwHewE56jxvLcJthzgnrpdHXdpvHnyRbwU9RemPlX1JvsSm1FrY2zoMyphlHy6evD_9vuAC3M63isGOvAowWEKu-MhYEK3fQWMFFKZwzFkwF0jtomBXaQ8GcLKFQpnwhtJ_swhSXVuAHUpsGUwaErt-MfSF0rdRrPWqs-Zco_ejNE7rW7duoVExvR8zazgK_ZEHo-odl2lXG1o7Q9UEAQej60Zjm2B6XTUOyFW5MOborjFEQcLIVyVYD2yfmXOxurEEJcJTQOX4BoStMabaC1SEngFmg6auwsoox7detLkO66JzQ1eOIZF-2wn8VjAsb-hZd11PQNHZFiaa82LpDx4LQGVRMKsEP6Xv8snr-Aq4taumBQdFuwYrGWB-qx_smcKdrQtdb6XdtMS5N3ROtpy6ha-lcK1C5uC3rUrVchOILdQkFK1-8ZaXo3D97Vr4Ab-vmWInJGMLnyZqtZTUwu21xU0IeMCZ0XbRScfyWmtC1aTyMGixoR7J7LMzR60F5GFXGlqLrGEnthVWCvQqS3dOzwTfJ_Y5k9zmMuEAVvHB-rBSMDIxg9BzJpR25763WuJDQMRBKq1OChhRIdqdNz3N0ykdGqz3JbrU5mZ4NkexLSBgFo6E2vFUCPXW0CKWREb3C6D9KI3A4xBjixfMHPZ4TsgSS9yRJEoYfUeZZWia99eD23Qp4slL7kPQfWAUo19HIsreNcd4KVhM6DfsdlvICCJ1fzDuht8l7njJ0djoeEJqlZ2zShJaX2Hxv9bPcaqa-Ms2VsN06-dAh4g0c0vPw57yEATSe1mI0sdt1O0gS_h-Bsg6ows-sqooFT5COkrp9H71yZ8bOjNNAZMGHUeeDucWkokkCm03jd1YwvnmRSm1k3cRHPAuZxCh14xWh677ZuCTZKmxss-kJfzLET9l0VsLWhXACUvxJ6HocWnvHRYN7QWOcfCd0bZl0ImDTGclWPejpEDqZpVkCrMBdKEB5Hjfn0BUQ5imyOyHMzshlFcfg44Nug1vepmBOBLjYefwR8RZDvPkZXp7kPbxGWGtsgL2EOMLxAJshzfQEu-gXChcim03KP31uDM3jA-T3JZvlOTo6nR1oliZnTGaUJx8zsa1-qBs1YHF6OE0_wwQdDZik50xY-Tkm11nc9eavNFN7J903ptlWWJLdXZiEm9zn2LNyyH649NliOpv2M4qEf-v5b3HFf_8TEWKcl6SoKox0IEV2JgVLq74U38Iz7Ic5-ENpVpw13tjL0cQJfxRLN-WT6awqpDiIIT-LYTIvP5POA9U_53ktlf-14GOsJwkwwoEEk74ExaTI-HzeY2DbkLkn2Qgl9fAR_uyt1NvvohqSvhLLD2a3wn9j5S7grC6NPsrCMrt_0JWJG8-5lTHqH61vWr-W6gJIGI6xfWB0dfhKUCu81WJvPwVBGdVuZVxNV-yd57HveGzM7uKtry8mYt1i7vD0MA23hC-_oJrGb7wxKrZCFF20_9fdn6_Z_sT7hRT2YIdXmD___mCJFSlWz6C8psPyYrOqTMA0_huT-gOwBG0HYLPzg0NWlbDZKFmUm3BR3JRMqU2N2AhcuvbX80l3Aro0abzDYwGehLKT0_m507wsw8usDV7Zz_3Enwg-CuDhXJDSOR6DkhPo4hLoIJJLQVwEz2Z4mJkcsWlyJnkqqgQi6keKo-nv3zk8C1E7UPJFwJsIl0u8OTbWNMKqPezC-Rcq-Y63k7YJl0GpS1Nj-5WpVoS3BH4nHTx9fYDKmjoY1ZLjzPBmYAw3fJnxRbZgN2KZzuhkMZ0tpsnNbjmrsumc8SxfMFaKZFLRtFzwopgLludZTm_kkiY0TxZpkqYZzZPxVEwXecrmSb4oyjSlJE9EzaQa41IZG7u9CdfYZZrMkyS_Ca-HXHiRS6kWbxBG8fozub-xy3ADLtqtI3mipPPuBOOlV-EN8OAMQyb3vcs-CubgbSc0PPyEmJOoinTQOsGh2APTIN6lj1qgSjetVcu_fzvvIntd0n8HAAD__2KO0EE">