LLVM: Dump Module instead of Function in JIT mode (mono/mono#16837)
authorEgor Bogatov <egorbo@gmail.com>
Mon, 16 Sep 2019 00:43:10 +0000 (03:43 +0300)
committerSteve Pfister <steveisok@users.noreply.github.com>
Mon, 16 Sep 2019 00:43:10 +0000 (20:43 -0400)
commitf313f7e6639224c469136e84d677699a660d19e7
treedd37106786426ec1d20ab45fc324c950cb03a582
parent3f7ee53b8e016240759ac428d5f537252fe4355b
LLVM: Dump Module instead of Function in JIT mode (mono/mono#16837)

Since each function has its own module (in JIT mode) it makes sense to dump the whole module for MONO_VERBOSE_METHOD instead of just LLVM::Function.
It adds metadata, attributes and global variables (so it will be possible to copy-paste it to godbolt)

Example

static int Test(int x)
{
    return x / 10;
}

Diff for Unoptimized IR: https://www.diffchecker.com/NrF413Ts
Diff for Optimized IR: https://www.diffchecker.com/jbEkeFFS

So now we can see global variables and metadata for each function (and can easily paste them to godbolt.org)

NOTE: optimized IR for this case contains "dead" variables (dump_module allowed us to see such), we probably need some Module-wide optimizations to strip dead code such as -globaldce

NOTE2: why do we emit exceptions in the first place for this case at all?

Commit migrated from https://github.com/mono/mono/commit/0438397b8afc51aac45da55c155162e13e83cf19
src/mono/mono/mini/mini-llvm-cpp.cpp
src/mono/mono/mini/mini-llvm-cpp.h
src/mono/mono/mini/mini-llvm.c