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