llvm-project/llvm/test/Transforms/Inline
Bjorn Pettersson 3851496e6e Avoid inlining if there is byval arguments with non-alloca address space
Summary:
After teaching InlineCost more about address spaces ()
another fault was detected in the inliner. If an argument has
the byval attribute the parameter might be copied to an alloca.
That part seems to work fine even if the argument has a different
address space than the alloca address space. However, if the
address spaces differ, then the inlined function still might
refer to the parameter using the original address space (the
inliner does not handle that situation very well).

This patch avoids the problem by simply disallowing inlining
when there are byval arguments with address space that differs
from the alloca address space.

I'm not really sure how to transform the code if we want to
get inlining for this situation. I assume that it never has
been working, and that the fixes in r321809 just exposed an
old problem.

Fault found by skatkov (Serguei Katkov). It is mentioned in
follow up comments to https://reviews.llvm.org/D40455.

Reviewers: skatkov

Reviewed By: skatkov

Subscribers: uabelho, eraman, llvm-commits, haicheng

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

llvm-svn: 322181
2018-01-10 13:01:18 +00:00
..
AArch64 [InlineCost] Find more free binary operations 2017-12-22 17:09:09 +00:00
AMDGPU AMDGPU: Use a custom areInlineCompatible 2017-08-07 17:08:44 +00:00
ARM [Inliner] Restrict soft-float inlining penalty. 2017-12-22 02:08:08 +00:00
PowerPC [TTI] Refine the cost of EXT in getUserCost() 2017-07-15 02:12:16 +00:00
X86 [TTI] Refine the cost of EXT in getUserCost() 2017-07-15 02:12:16 +00:00
2003-09-14-InlineValue.ll
2003-09-22-PHINodeInlineFail.ll
2003-09-22-PHINodesInExceptionDest.ll
2003-09-22-PHINodesInNormalInvokeDest.ll
2003-10-13-AllocaDominanceProblem.ll
2004-04-15-InlineDeletesCall.ll
2004-04-20-InlineLinkOnce.ll
2004-10-17-InlineFunctionWithoutReturn.ll
2006-01-14-CallGraphUpdate.ll
2006-07-12-InlinePruneCGUpdate.ll
2006-11-09-InlineCGUpdate-2.ll
2006-11-09-InlineCGUpdate.ll
2007-04-15-InlineEH.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
2007-06-25-WeakInline.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
2007-12-19-InlineNoUnwind.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
2008-09-02-NoInline.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
2009-01-08-NoInlineDynamicAlloca.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
2009-01-13-RecursiveInlineCrash.ll
2009-05-07-CallUsingSelfCrash.ll
2010-05-12-ValueMap.ll
PR4909.ll
align.ll
alloca-bonus.ll Add address space mangling to lifetime intrinsics 2017-04-10 20:18:21 +00:00
alloca-dbgdeclare-merge.ll
alloca-dbgdeclare.ll Canonicalize the representation of empty an expression in DIGlobalVariableExpression 2017-08-30 18:06:51 +00:00
alloca-in-scc.ll
alloca-merge-align.ll
alloca_test.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
always-inline.ll Inliner: Don't remove calls to readnone+nounwind (but not always_inline) functions in the AlwaysInliner 2017-06-12 23:01:17 +00:00
arg-attr-propagation.ll Revert r296366 "[InlineFunction] add nonnull assumptions based on argument attributes" 2017-02-27 22:33:02 +00:00
array-alloca.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
array_merge.ll
attributes.ll Hardware-assisted AddressSanitizer (llvm part). 2017-12-09 00:21:41 +00:00
basictest.ll Inliner: Don't touch indirect calls 2017-06-09 03:29:20 +00:00
bfi-update.ll Fix a bug in caller's BFI update code after inlining. 2017-02-14 22:49:28 +00:00
blockaddress.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
byval-tail-call.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
byval.ll Avoid inlining if there is byval arguments with non-alloca address space 2018-01-10 13:01:18 +00:00
byval_lifetime.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
callgraph-update.ll
casts.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
cfg_preserve_test.ll [Inliner] Modernize all of the inliner tests that were using grep. 2016-12-27 02:47:37 +00:00
cgscc-cycle.ll [PM] Fix a bug where through CGSCC iteration we can get 2017-08-02 02:09:22 +00:00
cgscc-incremental-invalidate.ll [PM] Fix a nasty bug in the new PM where we failed to properly 2017-07-09 13:45:11 +00:00
cgscc-invalidate.ll [PM/Inliner] Make the new PM's inliner process call edges across an 2017-03-09 11:35:40 +00:00
cgscc-update.ll [PM] Teach the inliner's call graph update to handle inserting new edges 2016-12-28 03:13:12 +00:00
clear-analyses.ll [PH] Replace uses of AssertingVH from members of analysis results with 2017-01-24 12:55:57 +00:00
comdat-ipo.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
crash-lifetime-marker.ll Add address space mangling to lifetime intrinsics 2017-04-10 20:18:21 +00:00
crash.ll
crash2.ll
debug-info-duplicate-calls.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
debug-invoke.ll
delete-call.ll
deopt-bundles.ll
deoptimize-intrinsic-cconv.ll
deoptimize-intrinsic.ll
devirtualize-2.ll [PM] Introduce a devirtualization iteration layer for the new PM. 2016-12-28 11:07:33 +00:00
devirtualize-3.ll
devirtualize.ll
dynamic_alloca_test.ll
ephemeral.ll [InlineCost] Reduce inline thresholds to compensate for cost changes 2016-11-28 11:07:37 +00:00
externally_available.ll [Inliner] Modernize all of the inliner tests that were using grep. 2016-12-27 02:47:37 +00:00
frameescape.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
function-count-update-2.ll Improve PGO support for the new inliner 2017-01-20 22:44:04 +00:00
function-count-update-3.ll Improve PGO support for the new inliner 2017-01-20 22:44:04 +00:00
function-count-update.ll Improve PGO support for the new inliner 2017-01-20 22:44:04 +00:00
guard-intrinsic.ll
gvn-inline-iteration.ll
ignore-debug-info.ll Remove the obsolete offset parameter from @llvm.dbg.value 2017-07-28 20:21:02 +00:00
inalloca-not-static.ll [PM] Wire up another test to the new pass manager. 2016-12-27 06:46:16 +00:00
inline-assume.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline-byval-bonus.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline-cold-callee.ll Improve PGO support for the new inliner 2017-01-20 22:44:04 +00:00
inline-cold-callsite-pgo.ll [NewPM/Inliner] Reduce threshold for cold callsites in the non-PGO case 2017-06-27 23:11:18 +00:00
inline-cold-callsite-samplepgo.ll Move accurate-sample-profile into the function attribute. 2017-08-24 21:37:04 +00:00
inline-cold-callsite.ll [NewPM/Inliner] Reduce threshold for cold callsites in the non-PGO case 2017-06-27 23:11:18 +00:00
inline-cold.ll Decrease inlinecold-threshold to 45 2017-05-11 21:36:28 +00:00
inline-constexpr-addrspacecast-argument.ll ConstantFold: Handle gep nonnull, undef as well 2017-05-08 17:37:33 +00:00
inline-fast-math-flags.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline-funclets.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline-hot-callee.ll [Inliner] Do not mix callsite and callee hotness based updates. 2017-05-16 21:18:09 +00:00
inline-hot-callsite-2.ll Improve PGO support for the new inliner 2017-01-20 22:44:04 +00:00
inline-hot-callsite.ll [PM] Add ProfileSummaryAnalysis as a required pass in the new pipeline. 2017-05-04 16:58:45 +00:00
inline-indirect.ll
inline-invoke-tail.ll [Inliner] Fix a test where I typo'ed 'CHECK' as 'CHCEK' when converting 2017-01-04 11:15:01 +00:00
inline-invoke-with-asm-call.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline-optnone.ll
inline-optsize.ll [InlineCost] Remove skew when calculating call costs 2016-11-14 11:14:41 +00:00
inline-probe-stack.ll Add a "probe-stack" attribute 2017-06-21 18:46:50 +00:00
inline-stack-probe-size.ll Define behavior of "stack-probe-size" attribute when inlining. 2017-06-22 23:22:36 +00:00
inline-tail.ll Inliner: Don't mark notail calls with the 'tail' attribute 2017-11-27 19:03:40 +00:00
inline-threshold.ll
inline-varargs.ll [InlineFunction] Preserve calling convention when forwarding VarArgs. 2018-01-06 20:56:27 +00:00
inline-vla.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline_cleanup.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline_constprop.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline_dbg_declare.ll Parse and print DIExpressions inline to ease IR and MIR testing 2017-08-23 20:31:27 +00:00
inline_dce.ll [Inliner] Modernize all of the inliner tests that were using grep. 2016-12-27 02:47:37 +00:00
inline_invoke.ll [PM] Move the collection of call sites to a more appropriate place 2016-12-27 01:24:50 +00:00
inline_minisize.ll
inline_prune.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline_returns_twice.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline_ssp.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline_stats.ll [ThinLTO] Correct counting of functions in inliner stats 2017-03-24 17:59:06 +00:00
inline_unreachable-2.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
inline_unreachable.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
internal-scc-members.ll [PM/Inliner] Fix a bug in r297374 where we would leave stale calls in 2017-03-16 10:45:42 +00:00
invoke-cleanup.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
invoke-combine-clauses.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
invoke-cost.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
invoke_test-1.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
invoke_test-2.ll [Inliner] Modernize all of the inliner tests that were using grep. 2016-12-27 02:47:37 +00:00
invoke_test-3.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
label-annotation.ll Add llvm.codeview.annotation to implement MSVC __annotation 2017-09-05 20:14:58 +00:00
last-call-bonus.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
last-call-no-bonus.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
last-callsite.ll [PM] Provide an initial, minimal port of the inliner to the new pass manager. 2016-12-20 03:15:32 +00:00
lifetime-no-datalayout.ll Add address space mangling to lifetime intrinsics 2017-04-10 20:18:21 +00:00
lifetime.ll Add address space mangling to lifetime intrinsics 2017-04-10 20:18:21 +00:00
local-as-metadata-undominated-use.ll Remove the obsolete offset parameter from @llvm.dbg.value 2017-07-28 20:21:02 +00:00
monster_scc.ll [PM/Inliner] Add a test case that encapsulates the core issue addressed 2017-03-16 10:13:55 +00:00
nested-inline.ll [PM] Provide an initial, minimal port of the inliner to the new pass manager. 2016-12-20 03:15:32 +00:00
noalias-calls.ll
noalias-cs.ll
noalias.ll
noalias2.ll
noinline-recursive-fn.ll [PM] Add one of the features left out of the initial inliner patch: 2016-12-27 06:46:20 +00:00
noinline.ll
nonnull.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
null-function.ll
optimization-remarks-hotness-threshold.ll [opt-remarks] If hotness threshold is set, ignore remarks without hotness 2017-12-01 20:41:38 +00:00
optimization-remarks-passed-yaml.ll Emit only A Single Opt Remark When Inlining 2017-08-21 16:45:47 +00:00
optimization-remarks-with-hotness.ll Emit only A Single Opt Remark When Inlining 2017-08-21 16:45:47 +00:00
optimization-remarks-yaml.ll Emit only A Single Opt Remark When Inlining 2017-08-21 16:45:47 +00:00
optimization-remarks.ll Move verbosity check for remarks to the diag handler 2017-10-04 04:26:23 +00:00
parallel-loop-md.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
partial-inline-act.ll Renable test that was disabled due to cost analysis 2017-05-14 02:58:39 +00:00
pr21206.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
pr22285.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
pr26698.ll [InlineCost] Refactor the checks for different analyses to be a bit more 2017-08-14 21:25:00 +00:00
pr28298.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
pr33637.ll [Cloner] Re-map simplfied cloned instructions. 2017-07-01 03:29:33 +00:00
prof-update-instr.ll Fix update VP metadata after inlining for instrumentation PGO 2017-05-22 20:28:18 +00:00
prof-update-sample.ll Fix update VP metadata after inlining for instrumentation PGO 2017-05-22 20:28:18 +00:00
profile-meta.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
ptr-diff.ll Teach InlineCost about address spaces 2018-01-04 18:23:40 +00:00
recursive.ll [Inliner] Fix a nasty bug when inlining a non-recursive trace of 2017-08-19 06:56:11 +00:00
redundant-loads.ll [InlineCost] Skip volatile loads when looking for repeated loads 2017-12-19 13:42:58 +00:00
store-sroa.ll
switch.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
vector-bonus.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00
vector-no-bonus.ll [Inliner] Do not apply any bonus for cold callsites. 2017-07-28 21:47:36 +00:00
zero-cost.ll [PM] Turn on the new PM's inliner in addition to the current one for 2016-12-27 07:18:43 +00:00