fhahn added inline comments.

================
Comment at: llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp:312
     switch (II->getIntrinsicID()) {
     default: llvm_unreachable("doesn't pass 'hasAnalyzableMemoryWrite' 
predicate");
     case Intrinsic::lifetime_end:
----------------
asbirlea wrote:
> The crash is hitting this unreachable for the intrinsic "llvm.memcpy.inline".
> Simple repro: opt -dse test1.ll
> ```
> define void @test(i8* noalias nocapture %0, i8* noalias nocapture readonly 
> %1) {
>   tail call void @llvm.memcpy.inline(i8* align 1 %0, i8* align 1 %1, i64 3, 
> i1 false)
>   ret void
> }
> 
> declare void @llvm.memcpy.inline(i8* noalias nocapture writeonly, i8* noalias 
> nocapture readonly, i64 immarg, i1 immarg)
> ```
Thanks! The problem was that MemorySSA-based DSE only relies on whether we can 
find read/write memory locations. For `memcpy.inline`, MemoryLocation knows how 
to extract the arguments, but the DSE functions where not updated to account 
for that.

In the legacy DSE, we silently failed to optimized/eliminate `memcpy.inline` 
calls, but with the MemorySSA version we got a crash highlighting that the code 
needs updating.

That should be fixed by a5ec99da6ea7


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D87163/new/

https://reviews.llvm.org/D87163

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to