llvm-project/llvm/test/DebugInfo
Reid Kleckner f7c0980c10 Elide argument copies during instruction selection
Summary:
Avoids tons of prologue boilerplate when arguments are passed in memory
and left in memory. This can happen in a debug build or in a release
build when an argument alloca is escaped.  This will dramatically affect
the code size of x86 debug builds, because X86 fast isel doesn't handle
arguments passed in memory at all. It only handles the x86_64 case of up
to 6 basic register parameters.

This is implemented by analyzing the entry block before ISel to identify
copy elision candidates. A copy elision candidate is an argument that is
used to fully initialize an alloca before any other possibly escaping
uses of that alloca. If an argument is a copy elision candidate, we set
a flag on the InputArg. If the the target generates loads from a fixed
stack object that matches the size and alignment requirements of the
alloca, the SelectionDAG builder will delete the stack object created
for the alloca and replace it with the fixed stack object. The load is
left behind to satisfy any remaining uses of the argument value. The
store is now dead and is therefore elided. The fixed stack object is
also marked as mutable, as it may now be modified by the user, and it
would be invalid to rematerialize the initial load from it.

Supersedes D28388

Fixes PR26328

Reviewers: chandlerc, MatzeB, qcolombet, inglorion, hans

Subscribers: igorb, llvm-commits

Differential Revision: https://reviews.llvm.org/D29668

llvm-svn: 296683
2017-03-01 21:42:00 +00:00
..
AArch64 Renumber testcase metadata nodes after r290153. 2016-12-22 00:45:21 +00:00
ARM Fix an assertion in DwarfExpression when emitting fragments in vector registers 2016-12-22 06:10:41 +00:00
COFF MC/COFF: Do not emit forward associative section referenceds. 2017-02-17 17:32:54 +00:00
Generic [IR/Verifier] Don't visit DISubprograms more than needed. 2017-02-18 03:02:44 +00:00
Inputs [DWARF] Print leading zeros in type signature 2017-03-01 19:43:29 +00:00
Lanai
MIR Reapply r294532, reverted in r294787. 2017-02-14 19:08:45 +00:00
Mips Change how we handle section symbols on ELF. 2017-02-02 21:26:06 +00:00
PDB [pdb] Fix failing test 2017-01-25 21:21:02 +00:00
PowerPC Change how we handle section symbols on ELF. 2017-02-02 21:26:06 +00:00
Sparc
SystemZ [SystemZ] Save/restore r6 and r7 if function contains landing pad. 2016-06-28 14:13:11 +00:00
WebAssembly [WebAssembly] Convert the remaining unit tests to the new wasm-object-file target. 2017-02-28 23:37:04 +00:00
X86 Elide argument copies during instruction selection 2017-03-01 21:42:00 +00:00
arm-relocs.test
debuglineinfo-macho.test
debuglineinfo.test
debugmacinfo.test
dwarfdump-64-bit-dwarf.test
dwarfdump-accel.test Synchronize LLVM and clang's ObjCDeclSpec::ObjCPropertyAttributeKind. 2016-07-14 00:41:18 +00:00
dwarfdump-debug-frame-simple.test
dwarfdump-debug-loc-simple.test
dwarfdump-dump-flags.test
dwarfdump-dump-gdbindex.test Revert r282238 "Revert r282235 "[llvm-dwarfdump] - Teach dwarfdump to dump gdb-index section."" 2016-09-23 11:01:53 +00:00
dwarfdump-dwp.test
dwarfdump-header.test [DWARF] Print leading zeros in type signature 2017-03-01 19:43:29 +00:00
dwarfdump-implicit-const.test DebugInfo: support for DW_FORM_implicit_const 2017-01-10 21:18:26 +00:00
dwarfdump-invalid.test
dwarfdump-line-dwo.test
dwarfdump-macho-relocs.test
dwarfdump-macho-universal.test
dwarfdump-objc.test Synchronize LLVM and clang's ObjCDeclSpec::ObjCPropertyAttributeKind. 2016-07-14 00:41:18 +00:00
dwarfdump-pubnames.test
dwarfdump-ranges.test
dwarfdump-type-units.test dwarfdump: -summarize-types: print a short summary (unqualified type name, hash, length) of type units rather than dumping contents 2016-10-18 21:09:48 +00:00
dwarfdump-zlib.test Recommit r270547 ([llvm-dwarfdump] - Teach dwarfdump to decompress debug sections in zlib style.) 2016-05-24 12:48:46 +00:00
dwo.ll
llvm-symbolizer-split-dwarf-empty.test Use %T instead of cd'ing to Output directly. 2016-04-23 11:01:36 +00:00
llvm-symbolizer-zlib.test Recommit r270547 ([llvm-dwarfdump] - Teach dwarfdump to decompress debug sections in zlib style.) 2016-05-24 12:48:46 +00:00
llvm-symbolizer.test llvm-symbolizer: prefer .dwo contents over fission-gmlt-like-data when .dwo file is present 2016-04-22 21:32:59 +00:00
macro_link.ll [Debug Info] Added a LIT test that covers the fix committed in rL277290. 2016-08-11 07:22:53 +00:00
member-pointers.o
missing-abstract-variable.o
skeletoncu.ll Unxfail passing tests on Hexagon 2016-08-19 15:07:58 +00:00
strip-DIGlobalVariable.ll Teach llvm::StripDebugInfo() about global variable !dbg attachments. 2016-10-10 17:53:33 +00:00
strip-loop-metadata.ll stripDebugInfo() should remove DILocation's found in !llvm.loop metadata 2017-01-28 11:22:05 +00:00