llvm-6502/lib/Transforms/IPO
Peter Collingbourne 6e5bbb57e4 ArgumentPromotion: Drop sret attribute on functions that are only called directly.
If the first argument to a function is a 'this' argument and the second
has the sret attribute, the ArgumentPromotion pass may promote the 'this'
argument to more than one argument, violating the IR constraint that 'sret'
may only be applied to the first or second argument.

Although this IR constraint is arguably unnecessary, it highlighted the fact
that ArgPromotion does not need to preserve this attribute. Dropping the
attribute reduces register pressure in the backend by avoiding the register
copy required by sret. Because sret implies noalias, we also replace the
former with the latter.

Differential Revision: http://reviews.llvm.org/D10353

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239488 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-10 21:14:34 +00:00
..
ArgumentPromotion.cpp ArgumentPromotion: Drop sret attribute on functions that are only called directly. 2015-06-10 21:14:34 +00:00
BarrierNoopPass.cpp
CMakeLists.txt Add new EliminateAvailableExternally module pass, which is performed in 2015-06-10 17:49:28 +00:00
ConstantMerge.cpp
DeadArgumentElimination.cpp
ElimAvailExtern.cpp Add new EliminateAvailableExternally module pass, which is performed in 2015-06-10 17:49:28 +00:00
ExtractGV.cpp
FunctionAttrs.cpp [PM/AA] Start refactoring AliasAnalysis to remove the analysis group and 2015-06-04 02:03:15 +00:00
GlobalDCE.cpp
GlobalOpt.cpp
InlineAlways.cpp
Inliner.cpp
InlineSimple.cpp
Internalize.cpp
IPConstantPropagation.cpp
IPO.cpp
LLVMBuild.txt
LoopExtractor.cpp
LowerBitSets.cpp
Makefile
MergeFunctions.cpp MergeFunctions: Don't replace a weak function use by another equivalent weak function 2015-06-09 18:19:17 +00:00
PartialInlining.cpp
PassManagerBuilder.cpp Add new EliminateAvailableExternally module pass, which is performed in 2015-06-10 17:49:28 +00:00
PruneEH.cpp
StripDeadPrototypes.cpp
StripSymbols.cpp