llvm-project/llvm/lib/CodeGen/GlobalISel
Jessica Paquette 727328ab63 [AArch64][GlobalISel] Tail call memory intrinsics
Because memory intrinsics are handled differently than other calls, we need to
check them for tail call eligiblity in the legalizer. This allows us to still
inline them when it's beneficial to do so, but also tail call when possible.

This adds simple tail calling support for when the intrinsic is followed by a
return.

It ports the attribute checks from `TargetLowering::isInTailCallPosition` into
a similarly-named function in LegalizerHelper.cpp. The target-specific
`isUsedByReturnOnly` hook is not ported here.

Update tailcall-mem-intrinsics.ll to show that GlobalISel can now tail call
memory intrinsics.

Update legalize-memcpy-et-al.mir to have a case where we don't tail call.

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

llvm-svn: 371893
2019-09-13 20:25:58 +00:00
..
CMakeLists.txt [GISel]: Add GISelKnownBits analysis 2019-08-06 17:18:29 +00:00
CSEInfo.cpp [GlobalISel] CSEMIRBuilder: Add support for G_GEP 2019-08-15 23:45:45 +00:00
CSEMIRBuilder.cpp [globalisel] Add G_SEXT_INREG 2019-08-09 21:11:20 +00:00
CallLowering.cpp [AArch64][GlobalISel] Support sibling calls with outgoing arguments 2019-09-12 22:10:36 +00:00
Combiner.cpp [llvm] Migrate llvm::make_unique to std::make_unique 2019-08-15 15:54:37 +00:00
CombinerHelper.cpp GlobalISel: fix unused warnings in release builds. 2019-09-09 10:36:58 +00:00
GISelChangeObserver.cpp [AArch64][GlobalISel] Enable copy elision in the pre-legalizer combine and fix a crash. 2019-04-13 00:33:25 +00:00
GISelKnownBits.cpp [GlobalISel]: Fix a bug where we could dereference None 2019-09-09 22:51:41 +00:00
GlobalISel.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
IRTranslator.cpp [GlobalISel] When a tail call is emitted in a block, stop translating it 2019-09-10 23:34:45 +00:00
InstructionSelect.cpp GlobalISel: Fix missing pass dependency 2019-08-30 17:41:58 +00:00
InstructionSelector.cpp Allow target to handle STRICT floating-point nodes 2019-06-05 22:33:10 +00:00
LLVMBuild.txt Make GlobalISel depend on SelectionDAG after D63169 2019-06-22 01:30:17 +00:00
LegalityPredicates.cpp GlobalISel: Add alignment to LegalityQuery MMOs 2019-02-14 22:41:09 +00:00
LegalizeMutations.cpp GlobalISel: Try to make legalize rules more useful for vectors 2019-02-07 17:25:51 +00:00
Legalizer.cpp [GlobalISel] Legalizer: Retry combining illegal artifacts as long as there new artifacts 2019-08-23 20:30:35 +00:00
LegalizerHelper.cpp [AArch64][GlobalISel] Tail call memory intrinsics 2019-09-13 20:25:58 +00:00
LegalizerInfo.cpp [globalisel] Add G_SEXT_INREG 2019-08-09 21:11:20 +00:00
Localizer.cpp Apply llvm-prefer-register-over-unsigned from clang-tidy to LLVM 2019-08-15 19:22:08 +00:00
MachineIRBuilder.cpp [GlobalISel] Replace hard coded dynamic alloca handling with G_DYN_STACKALLOC. 2019-08-27 19:54:27 +00:00
RegBankSelect.cpp [llvm] Migrate llvm::make_unique to std::make_unique 2019-08-15 15:54:37 +00:00
RegisterBank.cpp Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
RegisterBankInfo.cpp [llvm] Migrate llvm::make_unique to std::make_unique 2019-08-15 15:54:37 +00:00
Utils.cpp [GlobalISel][CallLowering] Add support for splitting types according to calling conventions. 2019-09-03 21:42:28 +00:00