forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ssr: register merging not working when value used outside of the basic block #2
Labels
bug
Something isn't working
Comments
huettern
added a commit
that referenced
this issue
Aug 11, 2021
ssr setup pseudo instruction framework move ssr pseudo code to RISCVExpandPseudoInsts revert changes to isellowering wip: implemented ssr pop move SSR expansion to a seperate pass ssr pseudo expansion working ssr pseudo: cleanup debug ssr: add bound/stride setup instructions for 1,2,3,4D builtins and IR intrinsic for ssr setup WIP ssr: new setup order, add push ssr: intrinsic working, reverted order of setup cleanup comment ssr: pseudo push may load and store ssr: add pop intrinsic ssr: add enable/disable pseudo ssr: add enable/disable intrinsic ssr: move float reg selection to static function ssr: move expand pass to preEmit phase and replace push pop with target specific move ssr: back to pre reg alloc and fmv, add experimental register clobbering ssr: registers need defining or else, optimization fails to complete ssr: registers reserved in functions that use SSR ssr: cleanup change ssr register offset to word, not byte builtind pointer type to void clobber 3 ssr registers ssr: fix wrong register unpacking ssr: add test for register reserving ssr: switch encoding to original clang: intrinsics for bound stride setup ssr: first take on register merging test: fix encoding ssr: test for register merge ssr: optional register merging through command line argument ssr: mark region during register merge path by parsing CSR access ssr: add intrinsics for read/write/repetition setup ssr: move debug statement into macro ssr: remove debug ssr: mark ssr regs live in in all MBB between en/dis for usage in loops ssr: mark ssr regs live during merging in all blocks ssr: make live ins unique before exiting ssr: reduce liveins to only blocks containing push/pop ssr: fixing a duplicated entry for repetition pseudo #2
pulp-bot
pushed a commit
that referenced
this issue
Sep 4, 2021
ssr setup pseudo instruction framework move ssr pseudo code to RISCVExpandPseudoInsts revert changes to isellowering wip: implemented ssr pop move SSR expansion to a seperate pass ssr pseudo expansion working ssr pseudo: cleanup debug ssr: add bound/stride setup instructions for 1,2,3,4D builtins and IR intrinsic for ssr setup WIP ssr: new setup order, add push ssr: intrinsic working, reverted order of setup cleanup comment ssr: pseudo push may load and store ssr: add pop intrinsic ssr: add enable/disable pseudo ssr: add enable/disable intrinsic ssr: move float reg selection to static function ssr: move expand pass to preEmit phase and replace push pop with target specific move ssr: back to pre reg alloc and fmv, add experimental register clobbering ssr: registers need defining or else, optimization fails to complete ssr: registers reserved in functions that use SSR ssr: cleanup change ssr register offset to word, not byte builtind pointer type to void clobber 3 ssr registers ssr: fix wrong register unpacking ssr: add test for register reserving ssr: switch encoding to original clang: intrinsics for bound stride setup ssr: first take on register merging test: fix encoding ssr: test for register merge ssr: optional register merging through command line argument ssr: mark region during register merge path by parsing CSR access ssr: add intrinsics for read/write/repetition setup ssr: move debug statement into macro ssr: remove debug ssr: mark ssr regs live in in all MBB between en/dis for usage in loops ssr: mark ssr regs live during merging in all blocks ssr: make live ins unique before exiting ssr: reduce liveins to only blocks containing push/pop ssr: fixing a duplicated entry for repetition pseudo #2
SamuelRiedel
pushed a commit
that referenced
this issue
Nov 1, 2022
We experienced some deadlocks when we used multiple threads for logging using `scan-builds` intercept-build tool when we used multiple threads by e.g. logging `make -j16` ``` (gdb) bt #0 0x00007f2bb3aff110 in __lll_lock_wait () from /lib/x86_64-linux-gnu/libpthread.so.0 #1 0x00007f2bb3af70a3 in pthread_mutex_lock () from /lib/x86_64-linux-gnu/libpthread.so.0 #2 0x00007f2bb3d152e4 in ?? () #3 0x00007ffcc5f0cc80 in ?? () #4 0x00007f2bb3d2bf5b in ?? () from /lib64/ld-linux-x86-64.so.2 #5 0x00007f2bb3b5da27 in ?? () from /lib/x86_64-linux-gnu/libc.so.6 #6 0x00007f2bb3b5dbe0 in exit () from /lib/x86_64-linux-gnu/libc.so.6 #7 0x00007f2bb3d144ee in ?? () #8 0x746e692f706d742f in ?? () #9 0x692d747065637265 in ?? () #10 0x2f653631326b3034 in ?? () #11 0x646d632e35353532 in ?? () #12 0x0000000000000000 in ?? () ``` I think the gcc's exit call caused the injected `libear.so` to be unloaded by the `ld`, which in turn called the `void on_unload() __attribute__((destructor))`. That tried to acquire an already locked mutex which was left locked in the `bear_report_call()` call, that probably encountered some error and returned early when it forgot to unlock the mutex. All of these are speculation since from the backtrace I could not verify if frames 2 and 3 are in fact corresponding to the `libear.so` module. But I think it's a fairly safe bet. So, hereby I'm releasing the held mutex on *all paths*, even if some failure happens. PS: I would use lock_guards, but it's C. Reviewed-by: NoQ Differential Revision: https://reviews.llvm.org/D118439 (cherry picked from commit d919d02)
SamuelRiedel
pushed a commit
that referenced
this issue
Nov 1, 2022
ssr setup pseudo instruction framework move ssr pseudo code to RISCVExpandPseudoInsts revert changes to isellowering wip: implemented ssr pop move SSR expansion to a seperate pass ssr pseudo expansion working ssr pseudo: cleanup debug ssr: add bound/stride setup instructions for 1,2,3,4D builtins and IR intrinsic for ssr setup WIP ssr: new setup order, add push ssr: intrinsic working, reverted order of setup cleanup comment ssr: pseudo push may load and store ssr: add pop intrinsic ssr: add enable/disable pseudo ssr: add enable/disable intrinsic ssr: move float reg selection to static function ssr: move expand pass to preEmit phase and replace push pop with target specific move ssr: back to pre reg alloc and fmv, add experimental register clobbering ssr: registers need defining or else, optimization fails to complete ssr: registers reserved in functions that use SSR ssr: cleanup change ssr register offset to word, not byte builtind pointer type to void clobber 3 ssr registers ssr: fix wrong register unpacking ssr: add test for register reserving ssr: switch encoding to original clang: intrinsics for bound stride setup ssr: first take on register merging test: fix encoding ssr: test for register merge ssr: optional register merging through command line argument ssr: mark region during register merge path by parsing CSR access ssr: add intrinsics for read/write/repetition setup ssr: move debug statement into macro ssr: remove debug ssr: mark ssr regs live in in all MBB between en/dis for usage in loops ssr: mark ssr regs live during merging in all blocks ssr: make live ins unique before exiting ssr: reduce liveins to only blocks containing push/pop ssr: fixing a duplicated entry for repetition pseudo #2 (cherry picked from commit 925e044)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
in case the use of an ssr_pop(0) is in a different BB, the register merging just eliminates the
pop
but doesn't replace the actual use of e.g.ft0
.this then leads to a crash of the compiler.
It can be mitigated with
-mllvm -ssr-noregmerge
but that is not the idea of SSRsThe text was updated successfully, but these errors were encountered: