Issue |
126417
|
Summary |
[SLP][DebugInfo] "!DIAssignID attached to unexpected instruction kind" after store => @llvm.experimental.vp.strided.store conversion
|
Labels |
debuginfo,
llvm:SLPVectorizer
|
Assignees |
|
Reporter |
asb
|
I'm filing this issue rather than attempting a patch directly as I'd appreciate a second opinion on who is at fault here. Looking at [the docs on debug assignment tracking](https://llvm.org/docs/AssignmentTracking.html), SLPVectorizer's use of `mergeDIAssignID` when converting the stores to the strided store intrinsic seems (to my non-expert-in-debuginfo eye!) in line with the advice. Possibly the check in `Verifier::visitDIAssignIDMetadata` is simply overzealous (it checks `isa<AllocaInst>(I) || isa<StoreInst>(I) || isa<MemIntrinsic>(I)`). If so - would there be any concerns about adding `|| isa<IntrinsicInst>(I)` and assuming any intrinsic it is attached to acts like a store?
Thanks to @mikhailramalho for noting the issue when compiling SPEC with `-g`.
This is a reduced test case:
```
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"
define void @main_argv() #0 {
entry:
%sar_height.i = getelementptr i8, ptr null, i64 24
store ptr %sar_height.i, ptr null, align 8
%vui.i = getelementptr i8, ptr null, i64 44
%0 = load i32, ptr %vui.i, align 4
%sar_width.i = getelementptr i8, ptr null, i64 20
%1 = load i32, ptr %sar_width.i, align 4
%i_sar_width.i = getelementptr i8, ptr null, i64 48
store i32 %1, ptr %i_sar_width.i, align 8, !DIAssignID !4
%2 = load i32, ptr %sar_height.i, align 4
store i32 %2, ptr %vui.i, align 4
ret void
}
attributes #0 = { "target-features"="+64bit,+a,+c,+d,+f,+m,+relax,+v,+zaamo,+zalrsc,+zicsr,+zifencei,+zmmul,+zve32f,+zve32x,+zve64d,+zve64f,+zve64x,+zvl128b,+zvl32b,+zvl64b,-b,-e,-experimental-sdext,-experimental-sdtrig,-experimental-smctr,-experimental-ssctr,-experimental-svukte,-experimental-xqcia,-experimental-xqciac,-experimental-xqcicli,-experimental-xqcicm,-experimental-xqcics,-experimental-xqcicsr,-experimental-xqciint,-experimental-xqcilo,-experimental-xqcilsm,-experimental-xqcisls,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-experimental-zvbc32e,-experimental-zvkgs,-h,-sha,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smdbltrp,-smepmp,-smmpm,-smnpm,-smrnmi,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssdbltrp,-ssnpm,-sspm,-ssqosid,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-supm,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-svvptc,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvmem,-xcvsimd,-xmipscmove,-xmipslsp,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-xwchc,-za128rs,-za64rs,-zabha,-zacas,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmp,-zcmt,-zdinx,-zfa,-zfbfmin,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zihintntl,-zihintpause,-zihpm,-zimop,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-ztso,-zvbb,-zvbc,-zvfbfmin,-zvfbfwma,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl4096b,-zvl512b,-zvl65536b,-zvl8192b" }
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3}
!0 = distinct !DICompileUnit(language: DW_LANG_C11, file: !1, producer: "clang version 21.0.0git", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, globals: !2, splitDebugInlining: false, nameTableKind: None)
!1 = !DIFile(filename: "x264.c", directory: "/home/asb/llvm-test-suite/build.clang-head-di-repro", checksumkind: CSK_MD5, checksum: "a24a70e9a69b8d18ca4f64525db2c55f")
!2 = !{}
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = distinct !DIAssignID()
```
Just do `~/llvm-project/build/default/bin/opt -passes=slp-vectorizer -S < reduced.ll` to get:
```
!DIAssignID attached to unexpected instruction kind
call void @llvm.experimental.vp.strided.store.v2i32.p0.i64(<2 x i32> %1, ptr align 4 %i_sar_width.i, i64 -4, <2 x i1> splat (i1 true), i32 2), !DIAssignID !4
!4 = distinct !DIAssignID()
LLVM ERROR: Broken module found, compilation aborted!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
....
```
CC @OCHyams @SLTozer
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs