llvm-project/llvm/test/Transforms
Robert Lougher 0c93ea2634 [TailCallElim] Enable marking of calls with byval as tails
In r339636 the alias analysis rules were changed with regards to tail calls
and byval arguments. Previously, tail calls were assumed not to alias
allocas from the current frame. This has been updated, to not assume this
for arguments with the byval attribute.

This patch aligns TailCallElim with the new rule. Tail marking can now be
more aggressive and mark more calls as tails, e.g.:

define void @test() {
  %f = alloca %struct.foo
  call void @bar(%struct.foo* byval %f)
  ret void
}

define void @test2(%struct.foo* byval %f) {
  call void @bar(%struct.foo* byval %f)
  ret void
}

define void @test3(%struct.foo* byval %f) {
  %agg.tmp = alloca %struct.foo
  %0 = bitcast %struct.foo* %agg.tmp to i8*
  %1 = bitcast %struct.foo* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i1 false)
  call void @bar(%struct.foo* byval %agg.tmp)
  ret void
}

The problematic case where a byval parameter is captured by a call is still
handled correctly, and will not be marked as a tail (see PR7272).

llvm-svn: 343986
2018-10-08 18:03:40 +00:00
..
ADCE [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
AddDiscriminators [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
AggressiveInstCombine [AggressiveInstCombine] avoid crashing on unsimplified code (PR37446) 2018-05-14 13:43:32 +00:00
AlignmentFromAssumptions [AlignmentFromAssumptions] Set source and dest alignments of memory intrinsiscs separately 2018-02-22 18:55:59 +00:00
ArgumentPromotion [ArgumentPromotion] don't break musttail invariant PR36543 2018-03-02 00:59:27 +00:00
AtomicExpand AMDGPU: Expand atomicrmw nand in IR 2018-10-02 03:50:56 +00:00
BDCE [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
BlockExtractor BlockExtractor: Don’t delete functions directly 2018-03-12 22:28:18 +00:00
BranchFolding
CallSiteSplitting [CallSiteSplitting] Add debug location to created PHI nodes. 2018-09-11 17:55:58 +00:00
CalledValuePropagation
CodeExtractor [CodeExtractor] Use 'normal destination' BB as insert point to store invoke results. 2018-08-21 20:07:46 +00:00
CodeGenPrepare [CodeGen] Enable tail calls for functions with NonNull attributes. 2018-09-26 10:46:18 +00:00
ConstProp [X86] Add constant folding for AVX512 versions of scalar floating point to integer conversion intrinsics. 2018-08-12 22:09:54 +00:00
ConstantHoisting Revert "Revert r341269: [Constant Hoisting] Hoisting Constant GEP Expressions" 2018-09-04 22:17:03 +00:00
ConstantMerge
Coroutines [Coroutines] PR34897: Fix incorrect elisions 2018-05-11 03:12:28 +00:00
CorrelatedValuePropagation [CVP] Extend tests to illustrate an old patch isn't needed 2018-08-24 21:56:43 +00:00
CrossDSOCFI
DCE
DeadArgElim [deadargelim] Update dbg.value of 'unused' parameters 2018-09-24 10:01:24 +00:00
DeadStoreElimination [BasicAA] Don't assume tail calls with byval don't alias allocas 2018-08-14 01:24:35 +00:00
DivRemPairs
EarlyCSE [EarlyCSEwMemorySSA] Add MSSA verification and tests to make EarlyCSE failures easier to track. 2018-09-17 22:35:21 +00:00
EliminateAvailableExternally
EntryExitInstrumenter [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
ExpandMemCmp/X86
Float2Int
ForcedFunctionAttrs
FunctionAttrs [FuncAttrs] Remove "access range attributes" for read-none functions 2018-09-11 11:51:29 +00:00
FunctionImport [ThinLTO] Keep non-prevailing (linkonce|weak)_odr symbols live 2018-10-08 15:12:48 +00:00
GCOVProfiling [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
GVN [GVN] Invalidate cached info for values replaced by equality propagation 2018-09-10 12:23:05 +00:00
GVNHoist [MemorySSAUpdater] Avoid creating self-referencing MemoryDefs 2018-09-11 14:29:59 +00:00
GVNSink [Local] Make DoesKMove required for combineMetadata. 2018-08-24 11:40:04 +00:00
GlobalDCE
GlobalMerge [GlobalMerge] Allow merging globals with explicit section markings. 2018-08-02 23:54:16 +00:00
GlobalOpt [PPC] Remove Darwin support from POWER backend. 2018-08-28 01:18:29 +00:00
GlobalSplit
GuardWidening [GuardWidening] Ignore guards with trivial conditions 2018-08-22 02:40:49 +00:00
HotColdSplit Add support for new pass manager 2018-10-03 05:55:20 +00:00
IPConstantProp Recommit r333268: [IPSCCP] Use PredicateInfo to propagate facts from cmp instructions. 2018-08-23 11:04:00 +00:00
IRCE Revert "[SCEV][NFC] Check NoWrap flags before lexicographical comparison of SCEVs" 2018-08-27 21:41:37 +00:00
IndVarSimplify [IndVars] Remove unreasonable checks in rewriteLoopExitValues 2018-09-18 04:57:18 +00:00
IndirectBrExpand
InferAddressSpaces AMDGPU: Fix tests using old number for constant address space 2018-09-10 02:54:25 +00:00
InferFunctionAttrs [LibCalls] Added returned attribute to libcalls 2018-08-23 05:18:23 +00:00
Inline [TailCallElim] Enable marking of calls with byval as tails 2018-10-08 18:03:40 +00:00
InstCombine [InstCombine] Fix incongruous GEP type addrspace 2018-10-08 08:40:45 +00:00
InstMerge [MergedLoadStoreMotion] Fix a debug invariant bug in mergeStores 2018-05-09 06:52:12 +00:00
InstNamer
InstSimplify [InstSimplify] add vector test for fneg+fdiv; NFC 2018-10-07 14:46:33 +00:00
InterleavedAccess
Internalize
JumpThreading [Local] Make DoesKMove required for combineMetadata. 2018-08-24 11:40:04 +00:00
LCSSA [DebugInfo][LCSSA] Preserve debug location in lcssa phis 2018-07-31 14:54:52 +00:00
LICM [NFC] Add Requires: asserts where needed 2018-09-13 04:43:24 +00:00
LoadStoreVectorizer AMDGPU: Fix private handling for allowsMisalignedMemoryAccesses 2018-09-24 13:18:15 +00:00
LoopDataPrefetch [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
LoopDeletion
LoopDistribute [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
LoopIdiom SCEV should forget all loops containing a deleted block. 2018-08-09 17:53:26 +00:00
LoopInstSimplify Update MemorySSA in LoopInstSimplify. 2018-08-22 20:05:21 +00:00
LoopInterchange [LoopInterchange] Preserve LCSSA. 2018-09-26 19:34:25 +00:00
LoopLoadElim
LoopPredication [LoopPredication] Add profitability check based on BPI 2018-03-22 16:03:59 +00:00
LoopReroll [LoopReroll] Rewrite induction variable rewriting. 2018-06-22 22:58:55 +00:00
LoopRotate [New PM] Introducing PassInstrumentation framework 2018-09-20 17:08:45 +00:00
LoopSimplify [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
LoopSimplifyCFG Update MemorySSA in LoopSimplifyCFG. 2018-08-22 20:10:21 +00:00
LoopStrengthReduce AMDGPU: Fix some outdated datalayouts in tests 2018-09-13 11:56:28 +00:00
LoopUnroll Remove LoopID metadata from the branch instruction 2018-09-26 01:03:21 +00:00
LoopUnrollAndJam [UnJ] Improve explicit loop count checks 2018-08-11 07:37:31 +00:00
LoopUnswitch Update MemorySSA in LoopUnswitch. 2018-09-11 19:19:21 +00:00
LoopVectorize [LV] Do not create SCEVs on broken IR in emitTransformedIndex. PR39160 2018-10-08 05:46:29 +00:00
LoopVersioning Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
LoopVersioningLICM
LowerAtomic
LowerExpectIntrinsic
LowerGuardIntrinsic
LowerInvoke
LowerSwitch
LowerTypeTests [LowerTypeTests] Limit when icall jumptable entries are emitted 2018-07-13 19:57:39 +00:00
Mem2Reg Improve ConvertDebugDeclareToDebugValue 2018-06-26 06:17:00 +00:00
MemCpyOpt Merge clang's isRepeatedBytePattern with LLVM's isBytewiseValue 2018-09-21 05:17:42 +00:00
MergeFunc [MergeFunctions] Fix merging of small weak functions 2018-05-15 11:31:07 +00:00
MergeICmps Re-submitting changes in D51550 because it failed to patch. 2018-09-24 20:47:12 +00:00
MetaRenamer
NameAnonGlobals
NaryReassociate [NaryReassociate] Detect deleted instr with WeakVH 2018-05-24 06:09:02 +00:00
NewGVN [NewGVN] Mark function as changed if we erase instructions. 2018-09-07 11:41:34 +00:00
ObjCARC [ObjCARC] Prevent code motion into a catchswitch 2018-05-16 04:52:18 +00:00
PGOProfile [PGO] Control Height Reduction 2018-09-04 17:19:13 +00:00
PartiallyInlineLibCalls
PhaseOrdering [PhaseOrdering] remove stale comments; NFC 2018-05-09 23:10:46 +00:00
PlaceSafepoints
PreISelIntrinsicLowering
PruneEH [PM][FunctionAttrs] add NoUnwind attribute inference to PostOrderFunctionAttrs pass 2018-03-23 21:46:16 +00:00
Reassociate revert r341288 - [Reassociate] swap binop operands to increase factoring potential 2018-09-12 21:29:11 +00:00
Reg2Mem
RewriteStatepointsForGC NFC - Various typo fixes in tests 2018-07-04 13:28:39 +00:00
SCCP [IPSCCP] Fix a problem with removing labels in a switch with undef condition 2018-09-20 09:00:17 +00:00
SLPVectorizer Fix vectorization of canonicalize 2018-09-17 13:24:30 +00:00
SROA [SROA] Fix alignment for uses of PHI nodes. 2018-08-30 18:59:24 +00:00
SafeStack SafeStack: Prevent OOB reads with mem intrinsics 2018-08-30 20:44:51 +00:00
SampleProfile [SampleFDO] Add FunctionOffsetTable in compact binary format profile. 2018-09-14 20:52:59 +00:00
ScalarizeMaskedMemIntrin/X86 [ScalarizeMaskedMemIntrin] Use MinAlign to calculate alignment for the scalar load/stores to handle element types that are byte-sized but not powers of 2. 2018-09-28 03:35:37 +00:00
Scalarizer [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
SeparateConstOffsetFromGEP [Split GEP] handle trunc() in separate-const-offset-from-gep pass. 2018-05-11 21:13:19 +00:00
SimpleLoopUnswitch [SimpleLoopUnswitch] remove a chain of dead blocks at once 2018-09-04 20:19:41 +00:00
SimplifyCFG [SimplifyCFG] Put an alignment on generated switch tables 2018-09-12 09:54:17 +00:00
Sink
SpeculateAroundPHIs
SpeculativeExecution
StraightLineStrengthReduce
StripDeadPrototypes
StripSymbols
StructurizeCFG AMDGPU: Fix tests using old number for constant address space 2018-09-10 02:54:25 +00:00
SyntheticCountsPropagation
TailCallElim [TailCallElim] Enable marking of calls with byval as tails 2018-10-08 18:03:40 +00:00
ThinLTOBitcodeWriter [ThinLTOBitcodeWriter] Emit summaries for regular LTO modules 2018-06-01 15:20:47 +00:00
Util [PredicateInfo] Use custom mangling to support ssa_copy with unnamed types. 2018-07-24 14:49:52 +00:00
WholeProgramDevirt [ThinLTO] Efficiency fix for writing type id records in per-module indexes 2018-09-25 20:14:40 +00:00