Commits

Arnold Schwaighofer committed f94376f926f
[CopyForwarding] Handle single definition source take copy forwarding This handles the case were we copy a single definition "%src" live range that is destroyed imediately. The destination address is known to be initialized by only this copy or by writes dominated by this copy. For example: foo(@in Protocol) { bb(%src: $*Protocol) %dst = alloc_stack Protocol copy_addr [take] %src, [initialization] %dst#1 ... [use %dst#1] } => foo(@in Protocol) { bb(%src: $*Protocol) ... [use %src#1] } O improvments > 10% (time before/after) DollarMap 1.13226 DollarReduce 1.11044 JSONHelperDeserialize 1.1365 StringWalk 1.13523 SwiftStructuresLinkedList 2.1201 SwiftStructuresQueue 1.86783 SwiftStructuresStack 1.22642 O regression: SwiftStructuresBubbleSort 0.912005 Onone improvements > 10% (time before/after) Dictionary 1.25214 Dictionary2 1.28772 Dictionary3 1.25364 DictionaryLiteral 1.12717 DictionaryRemove 1.14766 DictionarySwap 1.16806 DollarMap 1.14829 DollarReduce 1.11194 Forest 1.15122 Histogram 1.15321 JSONHelperDeserialize 1.14257 Prims 1.25893 RGBHistogram 1.11035 Richards 1.14413 StrSplitter 1.13805 SwiftStructuresGraphBFS 1.40441 SwiftStructuresLinkedList 1.60171 SwiftStructuresQueue 1.38401 SwiftStructuresStack 1.17395 TwoSum 1.14819 rdar://19851003 Swift SVN r25431