[llvm-dev] Deleting function IR after codegen

Hal Finkel via llvm-dev llvm-dev at lists.llvm.org
Mon Mar 7 16:56:45 PST 2016


----- Original Message -----
> From: "Pete Cooper" <peter_cooper at apple.com>
> To: "Chandler Carruth" <chandlerc at gmail.com>, "Duncan P. N. Exon Smith" <dexonsmith at apple.com>, "Hal Finkel"
> <hfinkel at anl.gov>, "Philip Reames" <listmail at philipreames.com>, "Mehdi Amini" <mehdi.amini at apple.com>, "Rafael
> Espíndola" <rafael.espindola at gmail.com>
> Cc: "llvm-dev" <llvm-dev at lists.llvm.org>
> Sent: Monday, March 7, 2016 6:44:06 PM
> Subject: Deleting function IR after codegen
> 
> Hi all
> 
> After codegen for a given function, the IR should no longer be
> needed.  In the AsmPrinter we convert from MI->MCInstr, and then we
> never go back and look at the IR during the MC layer.
> 
> I’ve prototyped a simple pass which can be (optionally) scheduled to
> do just this.  It is added at the end of addPassesToEmitFile.  It is
> optional so that clang can continue to leak the IR with
> --disable-free, but i would propose that all other tools, and
> especially LTO, would enable it.  The savings are 20% of peak memory
> in LTO of clang itself.
> 
> I could attach a patch, but first i’d really like to know if anyone
> is fundamentally opposed to this.
> 
> I should note, a couple of issues have come up in the prototype.
> - llvm::getDISubprogram was walking the function body to find the
> subprogram.  This is trivial to fix as functions now have !dbg on
> them.
> - The AsmPrinter is calling canBeOmittedFromSymbolTable on
> GlobalValue’s which then walks all their uses.  I think this should
> be done earlier in codegen as an analysis whose results are
> available to the AsmPrinter.

I imagine that these are good cleanups regardless, it sounds like the fixes are also likely compile-time improvements.

> - BB’s whose addresses are taken, i.e. jump tables, can’t be deleted.
>  Those functions will just keep their IR around so no changes there.
> 
> With the above issues fixed, I can run make check and pass all the
> tests.
> 
> Comments very welcome.

As an optional feature, it certainly makes sense to me.

 -Hal

> 
> Cheers,
> Pete

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory


More information about the llvm-dev mailing list