[llvm-dev] Prevent LLVM optimizations from erasing unused basic blocks

Gleb Popov via llvm-dev llvm-dev at lists.llvm.org
Tue Oct 9 11:31:59 PDT 2018


Hello LLVM Devs.

In my compiler I attach some arbitrary data to functions by creating BBs
with inline assembly. However, these blocks are "unused" from LLVM point of
view and get erased from the function.

To counter that I started adding checks for conditions that are guaranteed
to be true or false. I ended up with calling @llvm.returnaddress(i32 0)
intrinsic and comparing the result with 0. It worked well until in one
function I had two such calls and SROA replaced one of checks with constant
1 and erased the BB.

I should probably stop trying to fool LLVM and "do it right", but don't
have any idea how. Note that I can't use global variables for a reason, so
the data has to be encoded in a BB using inline assembly. All I need is
just prevent optimizations from erasing it.

Thanks in advance.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181009/5c03ad78/attachment.html>


More information about the llvm-dev mailing list