<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/145183>145183</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
EarlyCSE leaves around unused insertvalues when handling @llvm.aarch64.neon.st4.v8i8
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
aeubanks
</td>
</tr>
</table>
<pre>
```
$ cat /tmp/a.ll
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32"
target triple = "arm64-apple-macosx12.0.0"
define i32 @f() {
entry:
br label %for.cond1
for.cond1:
%vld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr null)
%vld4.fca.1.extract = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %vld4, 1
call void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8> zeroinitializer, <8 x i8> %vld4.fca.1.extract, <8 x i8> zeroinitializer, <8 x i8> zeroinitializer, ptr null)
br label %for.cond1
}
declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr)
declare void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, ptr captures(none))
$ opt -p early-cse /tmp/a.ll -S
...
define i32 @f() {
entry:
br label %for.cond1
for.cond1: ; preds = %for.cond1, %entry
%vld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr null)
%vld4.fca.1.extract = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %vld4, 1
%0 = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } { <8 x i8> zeroinitializer, <8 x i8> poison, <8 x i8> poison, <8 x i8> poison }, <8 x i8> %vld4.fca.1.extract, 1
%1 = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %0, <8 x i8> zeroinitializer, 2
%2 = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %1, <8 x i8> zeroinitializer, 3
call void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8> zeroinitializer, <8 x i8> %vld4.fca.1.extract, <8 x i8> zeroinitializer, <8 x i8> zeroinitializer, ptr null)
br label %for.cond1
}
...
$ opt -p early-cse /tmp/a.ll -S -verify-analysis-invalidation
LLVM ERROR: Function @f changed by EarlyCSEPass without invalidating analyses
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsVkFv4zgP_TXKhbAhyXbsHHxw2-TUD9-gBfZO20ysHUUyJDlt5tcv5CTTdqa70w7a0y4QKGLE8D2S4oPQe7UzRDUrrlhxs8ApDNbVSFOL5qtftLY_1mzJzx_eMJlDhwGY3IT9yOQGU60ZbwK6HQXoMaDGo50CsOwGmJSU7FnW2GSUJWdZk8l5iaZ4acbdMp-XRH3fCFmxrBGySkx28kjuo7WJppRPyMGpUdMFFd1-mSc4jpqSPXbWPwqZ8pSf_sJ409NWGQKVSWA53zJZMbkCVl4x3pAJ7siy6AbQOtDYkgYmi611aWdNL04xnsyzL5PFQff5TKJDrWM8YNl1BY-gKpatmbx-lw2svIn8tD7sU0TXDcs8NWRNqvs8PVSqSkfOZDUGB2bSmslVJHLmkW47TEVKj8Fhd2rIeX9APdEHsTthxTMxF2FO_GBV_zpxH54TfxHuGzmrjAoKtfpG7me419L6yetXUV45_6F8f9_z8uZyezqN7qMq-Kb-nrg9w_6dEr-X36U4HY5hcuSZrIw1FLlc6ERBsGOAZARCp49J5-mlOkByz3iTpuknjB2w7ApGR70_T_4z55iLLE5R_5vO83QyWfAZSxlP7kOhfgjyy0EcrfLWvO_niPR2XfiesviklGXB36Iv8sJDfhoP8RYe2b9DoE9S81ZtguRATm2PCRrUR698oswBteoxKGsYb25v__gfrO_u_n8XBWczmS4ezPoF3YBmRz20R1hHhOv79Rf0Hh5UGOIj6CmU2cEJgDzjzZfbdXO_Bj-1exUAoZ124Gi0LkCwMIQw-qiEcsPkZqfCMLVpZ_dMbmK_zl_J6OyfFAu8Ud5PUZ03gKYHZTo99QRhIOgc-gFa7L7GZtBcmMtzbtHXWb_KVrigWpQFLzKRcbEY6qxatSWW27Yv20JQ2ZWFlHnRt0LSUmTLhaollwVfSiGqXOQirWjVdshFQZms-BZZzmmPSqfz_bJut5gp1iIvRJUt5ub5-dEppaEHmE_j46y4Wbh6zq6ddj5eUOWDfwoTVNBUX2oNmvBAHtDZyfQwmclT_3y-PDwMZGBA0-vYgn-88YvJ6fr3a3_O7VDLvwIAAP__sug-NA">